UnicodeEncodeError将具有特殊字符的文本写入文件

时间:2016-12-06 16:43:34

标签: python encoding io

我得到一个带有特殊字符的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所期望的字符标准,以便替换违反它的任何数据?

1 个答案:

答案 0 :(得分:2)

您的问题是在Windows系统上以文本模式打开默认为区域设置代码页cp1252,这是一个仅对Unicode范围的一小部分进行编码的ASCII超集。

要修复,请提供更全面的编码,以支持整个Unicode范围; open接受关键字参数来覆盖默认编码,因此它就像更改一样简单:

expFile = open(expFilePath, 'w')

expFile = open(expFilePath, 'w', encoding='utf-8')

根据您的需要,我选择utf-8utf-16;前者对于大多数ASCII文本来说更加紧凑,并且在任何地方都可以看到,而后者与Microsoft的典型编码相匹配,用于存储便携式(非语言环境相关)文本,所以它可能是一些特定于Windows的文本。文本编辑会认识到它/更容易处理它。