使用未知编码中的非ASCII字符读取文本文件

时间:2012-06-18 16:08:08

标签: python encoding

我想阅读一个包含德语而不仅仅是字符的文件。我发现我可以这样做

  >>> import codecs
  >>> file = codecs.open('file.txt','r', encoding='UTF-8')
  >>> lines= file.readlines()

当我尝试在Python IDLE中运行我的工作但当我尝试从其他地方运行它时,这是有效的,但是没有给出正确的结果。有个主意吗?

2 个答案:

答案 0 :(得分:21)

您需要知道编码文本的字符编码。如果您事先不知道,可以尝试使用chardet模块进行猜测。首先安装它:

$ pip install chardet

然后,例如以二进制模式读取文件:

>>> import chardet
>>> chardet.detect(open("file.txt", "rb").read())
{'confidence': 0.9690625, 'encoding': 'utf-8'}

那么:

>>> import codecs
>>> import unicodedata
>>> lines = codecs.open('file.txt', 'r', encoding='utf-8').readlines()

答案 1 :(得分:0)

我相信文件正在正确读取,但在输出时使用了错误的编码。这是基于您在IDLE中获得正确结果的事实。

我建议尝试使用print(line.encode('utf-8')),但我担心我不知道Python 3是否会正确打印bytes对象。