【发布时间】:2016-10-31 04:53:45
【问题描述】:
我正在使用 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 调用中获得的。我不需要在输出文件中有中文字符。任何建议将不胜感激!
更新:
我一直在为每个中断的条目做一些手动解决方法,并出现其他不包含中文特殊字符但来自其他语言的条目,并且也破坏了程序。特殊字符仅在名称字段中。因此,名称可能类似于“Ałex”,其中混合了普通字符和特殊字符。在我解码包含此信息的字符串之前,我可以将其打印到屏幕上,它看起来像这样:b'name": "A\xc5ex",\r\n
但在我将其解码为 utf-8 后,如果我尝试输出它会给我一个错误。错误信息是:UnicodeEncodeError: 'charmap' codec can't encode character 'u0142' in position 2- character maps to -undefined-
我查了一下 \u0142 是什么,它是 ł 特殊字符。
【问题讨论】:
-
示例字符串似乎不是 UTF-8(也不是任何常见的中文多字节编码)。你确定是 UTF-8 编码(甚至是中文)?
-
你必须检查
Content-Type。如果是application/json; charset=utf-16,请使用utf-16。application/json的默认值为utf-8 -
我不能 100% 确定它的 utf-8,因为我从中获取数据的 Web 服务没有很好地记录它,但我尝试了几种不同的编码类型,包括 utf- 16.我确定它包含汉字。
-
每个http响应都有
Content-Type。你应该在解码之前检查它。 -
您在 Windows 上吗?你能发布完整的回溯吗?
标签: python python-3.x encoding python-unicode