UnicodeDecodeError:' charmap'编解码器不能在位置Y编码字符X:字符映射到未定义

时间:2015-10-30 20:52:42

标签: python encoding

要澄清:这个问题不是this one的重复,我已经尝试过那里的所有提示并且没有得到答案。

我有一个带有unicode数据的txt文件,我希望将该文件作为字符串打开。

我试过

a=open('myfile.txt', 'r', encoding='utf-8') 
print a.read()

但是有一个错误说:

  

UnicodeDecodeError:' charmap'编解码器不能对字符' \ ufeff'进行编码。在   位置Y:字符映射到未定义

现在我的问题是,我根本不关心我的UTF-8字符,无论如何都要设置一个例外,即每当python遇到utf-8字符时只需删除它或传递它? 另外澄清一下,我尝试过使用utf-8,utf-8-sig,utf-16等进行编码。

我也试过了,但没有运气。

a=open('myfile.txt', 'r', encoding='utf-8') 
try:
    print a.read()
except:
    pass

我也尝试导入编解码器和下面的代码:

a=codecs.open('myfile.txt', 'r', encoding='utf-8') 
print a.read()

但仍然出现同样的错误。

1 个答案:

答案 0 :(得分:2)

print声明中更正我的编码答案: 避免打印到stdout Windows,因为Python假定CMD终端只能处理Windows-1252(latin-1的ISO副本)。总是打印到stderr代替:

,这很容易回避
import sys
print('your text', file=sys.stderr)

在Linux上,正确打印Unicode应该没有问题。

Python 2.x的

P.S。:

from __future__ import print_function
import sys
print('your text', file=sys.stderr)

<强> P.P.S:  原始答案: 对于python 3.x:

a=open('myfile.txt', 'r', encoding='utf-8', errors='ignore') 

有关选项的详细列表,请参阅https://docs.python.org/3/library/codecs.html#error-handlers