Ale*_*all 6 python encoding python-3.x python-unicode
我正在使用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
Run Code Online (Sandbox Code Playgroud)
这是我正在使用的代码:
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)
Run Code Online (Sandbox Code Playgroud)
它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是什么,它是ł特殊角色.
警告:前方有霰弹枪解决方案
假设您只想删除所有文件中的所有外来字符(即它们对于您将来处理所有其他字段并不重要),您可以简单地忽略所有非 ASCII 字符
recipientData = json.loads(recipientContent.decode('utf-8', 'ignore'))
Run Code Online (Sandbox Code Playgroud)
经过
recipientData = json.loads(recipientContent.decode('ascii', 'ignore'))
Run Code Online (Sandbox Code Playgroud)
像这样,您可以在将来的处理之前删除所有非 ASCII 字符。
我将其称为霰弹枪解决方案,因为它在某些情况下可能无法正常工作:
b'\'或b"字符出现在 utf-16 字符的一部分中。| 归档时间: |
|
| 查看次数: |
1792 次 |
| 最近记录: |