Устранение неполадок кодирования / декодирования для файлов CSV и JSON Python

Сначала я создал файл, содержащий определенное предложение, используя:

 with open(labelFile, "wb") as out:
        json.dump(result, out,indent=4)

Это предложение в JSON выглядит так:

"-LSB- 97 -RSB- However , the influx of immigrants from mainland China , approximating NUMBER_SLOT per year , is a significant contributor to its population growth \u00c3 cents \u00c2 $ \u00c2 `` a daily quota of 150 Mainland Chinese with family ties in LOCATION_SLOT are granted a `` one way permit '' .", 

Затем я продолжил загружать это через:

with open(sys.argv[1]) as sentenceFile:
    sentenceFile = json.loads(sentenceFile.read())

обработайте это и затем запишите это в CSV, используя:

with open(sys.argv[2], 'wb') as csvfile:
    fieldnames = ['x','y','z'
                  ]
    writer = csv.DictWriter(csvfile, fieldnames=fieldnames)
    writer.writeheader()
    for sentence in sentence2locations2values:
         sentence = unicode(sentence['parsedSentence']).encode("utf-8")
         writer.writerow({'x': sentence})

Который сделал предложение в CSV-файле, открытом в Excel для Mac:

-LSB- 97 -RSB- However , the influx of immigrants from mainland China , approximating NUMBER_SLOT per year , is a significant contributor to its population growth à cents  $  `` a daily quota of 150 Mainland Chinese with family ties in LOCATION_SLOT are granted a `` one way permit '' .

Затем я перешел из Excel для Mac в Google Sheets, где он находится:

-LSB- 97 -RSB- However , the influx of immigrants from mainland China , approximating NUMBER_SLOT per year , is a significant contributor to its population growth à cents  $  `` a daily quota of 150 Mainland Chinese with family ties in LOCATION_SLOT are granted a `` one way permit '' .

Обратите внимание, очень немного отличается, Â заменил Ã,

а затем пометил его, вернув его обратно в Excel для Mac, после чего он вернулся к:

-LSB- 97 -RSB- However , the influx of immigrants from mainland China , approximating NUMBER_SLOT per year , is a significant contributor to its population growth à cents  $  `` a daily quota of 150 Mainland Chinese with family ties in LOCATION_SLOT are granted a `` one way permit '' .

Как я изначально читаю в CSV, содержащем такое предложение:

-LSB- 97 -RSB- However , the influx of immigrants from mainland China , approximating NUMBER_SLOT per year , is a significant contributor to its population growth à cents  $  `` a daily quota of 150 Mainland Chinese with family ties in LOCATION_SLOT are granted a `` one way permit '' .

на значение, которое:

"-LSB- 97 -RSB- However , the influx of immigrants from mainland China , approximating 45,000 per year , is a significant contributor to its population growth \u00c3 cents \u00c2 $ \u00c2 `` a daily quota of 150 Mainland Chinese with family ties in Hong Kong are granted a `` one way permit '' .", 

Чтобы он соответствовал тому, что было в исходном дампе json прямо в начале этого вопроса?

РЕДАКТИРОВАТЬ

Я проверяю из этого и вижу, что кодировка \u00c3 в Ã, формат в листах Google, на самом деле латинский 8.

РЕДАКТИРОВАТЬ

Я побежал enca и увидите, что исходный дамп-файл содержит 7-битные символы ASCII, а мой CSV - в Unicode. Так что мне нужно загрузить в Unicode и преобразовать в 7-битный ASCII?

1 ответ

Решение

Я разобрался с решением этой проблемы. Решение состояло в том, чтобы декодировать файл CSV из его исходного формата (обозначенного как UTF-8), а затем предложение становится первоначальным. Так:

csvfile = open(sys.argv[1], 'r')

fieldnames = ("x","y","z")
reader = csv.DictReader(csvfile, fieldnames)
next(reader)

for i,row in enumerate(reader):
    row['x'] = row['x'].decode("utf-8")

Очень странная вещь, которая произошла, заключается в том, что когда я редактировал CSV-файл в Excel для Mac и сохранял его, каждый раз он, кажется, преобразовывался в другую кодировку. Я предупреждаю других пользователей об этом, так как это огромная головная боль.

Другие вопросы по тегам