python list()函数改为(我认为)utf-8

时间:2017-05-08 23:29:09

标签: python unicode

作为我的python项目的一部分,我需要读取以utf-8编码的文本文件并将其拆分为列表。但是当我使用后跟撇号的字母时,list()似乎输出utf-8。比如以utf-8编码的文本文件infile.txt,内容为:

i like pi'

和代码

intext = open("path/infile.txt").read() 
print intext 

outnum = list(intext)
print outnum

打印出来:

i like pi’
['i', ' ', 'l', 'i', 'k', 'e', ' ', 'p', 'i', '\xe2', '\x80', '\x99']

我在OSX 10.11.6上使用Python 2.7.10。

谢谢!

1 个答案:

答案 0 :(得分:0)

你的眼睛欺骗了你......好吧,你的终端欺骗了你,但足够近。我可以重建你的字符串并打印撇号。但实际上该字符串包含utf-8编码的字节。 Python打印出编码的字符串,我的utf-8终端对其进行解码并显示unicode字符。这是python 2的一个怪癖.Python 3在保持编码字符串和解码字符串分离方面做得更好。

>>> chars = ['i', ' ', 'l', 'i', 'k', 'e', ' ', 'p', 'i', '\xe2', '\x80', '\x99']
>>> 
>>> s1 = ''.join(chars)
>>> print s1
i like pi’
>>> print repr(s1)
'i like pi\xe2\x80\x99'

由于您的文件是utf-8编码,您可以使用codecs模块将其转换为unicode。

intext = codecs.open("path/infile.txt", encoding="utf-8").read()