我得到一个带有特殊字符的UnicodeEncodeError
文字到文件:
File "D:\SOFT\Python3\lib\encodings\cp1252.py", line 19, in encode
return codecs.charmap_encode(input,self.errors,encoding_table)[0]
UnicodeEncodeError: 'charmap' codec can't encode character '\ufffd' in position 956: character maps to <undefined>
我的代码:
expFile = open(expFilePath, 'w')
# data var is what contains a special char
expFile.write("\n\n" + data)
这些数据可能是某些奇怪的角色,例如Microsoft Word,它被粘贴到应用程序的HTML表单中并且它被持久存在,现在我正在导入它。我甚至看不到它,当我查询它时,在我的数据库编辑器中显示为菱形。它只是在文本编辑器中有一个占位符。应该更严格地检查输入是否符合字符集,但事实并非如此。
有没有办法对数据进行编码,使任何字符都可以进行I / O处理?
或者,有没有办法检查我的str是否符合文件IO所期望的字符标准,以便替换违反它的任何数据?
答案 0 :(得分:2)
您的问题是在Windows系统上以文本模式打开默认为区域设置代码页cp1252
,这是一个仅对Unicode范围的一小部分进行编码的ASCII超集。
要修复,请提供更全面的编码,以支持整个Unicode范围; open
接受关键字参数来覆盖默认编码,因此它就像更改一样简单:
expFile = open(expFilePath, 'w')
到
expFile = open(expFilePath, 'w', encoding='utf-8')
根据您的需要,我选择utf-8
或utf-16
;前者对于大多数ASCII文本来说更加紧凑,并且在任何地方都可以看到,而后者与Microsoft的典型编码相匹配,用于存储便携式(非语言环境相关)文本,所以它可能是一些特定于Windows的文本。文本编辑会认识到它/更容易处理它。