Я использую Python 3.5 и пытаюсь взять блок байтового текста, который может содержать или не содержать специальные китайские символы, и вывести его в файл. Он работает для записей, которые не содержат китайских иероглифов, но ломается, когда они есть. Китайские иероглифы всегда являются именем человека и всегда добавляются к английскому написанию его имени. Текст отформатирован в формате JSON и должен быть декодирован, прежде чем я смогу его загрузить. Декодирование, кажется, идет нормально и не дает мне никаких ошибок. Когда я пытаюсь записать декодированный текст в файл, появляется следующее сообщение об ошибке:
UnicodeEncodeError: кодек 'charmap' не может кодировать символы в позициях 14-18: сопоставление символов с неопределенными значениями
Вот пример необработанных данных, которые я получаю до того, как что-либо с ними делаю:
b' "isBulkRecipient": "false",\r\n "name": "Name in, English \xef'
b'\xab\x62\xb6\xe2\x15\x8a\x8b\x8a\xee\xab\x89\xcf\xbc\x8a",\r\n
Вот код, который я использую:
recipientData = json.loads(recipientContent.decode('utf-8', 'ignore'))
recipientName = recipientData['signers'][0]['name']
pprint(recipientName)
with open('envelope recipient list.csv', 'a', newline='') as fp:
a = csv.writer(fp, delimiter=',')
csvData = [[recipientName]]
a.writerows(csvData)
recipientContent
получается из вызова API. Мне не нужны китайские иероглифы в выходном файле. Любой совет будет принят с благодарностью!
Обновлять:
Я делал некоторые обходные пути вручную для каждой ломающейся записи, и появились другие записи, которые не содержали китайских специальных символов, но содержали их из других языков, и это также сломало программу. Специальные символы есть только в поле имени. Таким образом, имя может быть чем-то вроде «Алекс», где оно представляет собой смесь обычных и специальных символов. Прежде чем я декодирую строку, содержащую эту информацию, я могу распечатать ее на экране, и она выглядит так: b'name": "A\xc5ex",\r\n
Но после того, как я декодирую его в utf-8, он выдаст мне ошибку, если я попытаюсь вывести его. Сообщение об ошибке: UnicodeEncodeError: 'charmap' codec can't encode character 'u0142' in position 2- character maps to -undefined-
Я посмотрел, что такое ł, и это специальный символ ł.
Content-Type
. Если этоapplication/json; charset=utf-16
, используйтеutf-16
. По умолчанию дляapplication/json
используетсяutf-8
. - person Nizam Mohamed   schedule 28.06.2016Content-Type
. Вы должны проверить это перед декодированием. - person Nizam Mohamed   schedule 28.06.2016'content-type': 'application/json; charset=utf-8'
- person Alex Hall   schedule 28.06.2016