我搜索了很多类似的问题和文章,但没有一篇能让我解决这个问题。
我在Windows 10上使用Python3.5.0(v3.5.0:374f501f4567,2015年9月13日,02:27:37)[msc v.1900 64位(amd64)]。
我有一个简单的文本文件,它是用utf-8编码的,如下所示:
我要做的就是将这个文件的内容读入一个python字符串,并在标准控制台中正确地显示出来。
这是第一次失败的尝试:
file_name=r'c:\temp\encoding_test.txt'
fh=open(file_name,'r')
f_str=fh.read()
fh.close()
print(f_str)
print语句引发异常:
“charmap”编解码器无法对位置100中的字符“\u201e”进行编码:字符映射到未定义的
使用调试器,f_str包含以下内容:
'我希望在将此文件读入python后正确显示以下字符:'\n'
这已经让我很困惑了。python 3不是在任何地方都使用utf-8作为默认值吗?还有什么编码可以工作我尝试了所有的notepad++支持,但都没有成功。
好吧,再复杂一点,我试着:
import codecs
file_name=r'c:\temp\encoding_test.txt'
my_encoding='utf-8'
fh=codecs.open(file_name,'r',encoding=my_encoding)
f_str=fh.read().encode(my_encoding)
fh.close()
print(f_str)
至少,这不会引发一个例外,但会导致
我希望在将此文件读入python后正确显示以下字符:\r\n\r\n\xc3\x84\xc3\x96\xc3\x9c\xc3\xa4\xc3\xb6\xc3\xbc\xc3\x9f\r\n'
我
这对我来说真是一团糟。有人能帮我解决这个问题吗?
最佳答案
在使用codecs.open
后,您正在将数据编码为字节,只需打印数据就可以满足您的需要,如我们解码时所见:
In [31]: s = b'I would like the following characters to display correctly after reading this file into Python:\r\n\r\n\xc3\x84\xc3\x96\xc3\x9c\xc3\xa4\xc3\xb6\xc3\xbc\xc3\x9f\r\n'
In [32]: print(s)
b'I would like the following characters to display correctly after reading this file into Python:\r\n\r\n\xc3\x84\xc3\x96\xc3\x9c\xc3\xa4\xc3\xb6\xc3\xbc\xc3\x9f\r\n'
In [33]: print(s.decode("utf-8"))
I would like the following characters to display correctly after reading this file into Python:
ÄÖÜäöüß
如果看不到正确的输出,那么问题就出在shell编码上。windows控制台编码不是utf-8,所以在哪里运行代码和shell编码很重要。