Python 列出文件中的unicode单词

Python 列出文件中的unicode单词,python,unicode,utf-8,Python,Unicode,Utf 8,我的代码是 f = codecs.open(r'C:\Users\Admin\Desktop\nepali.txt', 'r', 'UTF-8') nepali = f.read().split() for i in nepali: print i 在文件中显示单词: यो किताब टेबुल मा छ यो एक किताब हो केटा 但当我试图用代码创建单词列表时: file=codecs.open(r'C:\Users\Admin\Desktop\nepali.txt

我的代码是

f = codecs.open(r'C:\Users\Admin\Desktop\nepali.txt', 'r', 'UTF-8')
nepali = f.read().split()
for i in nepali:
    print i
在文件中显示单词:

यो
किताब
टेबुल
मा
छ
यो
एक
किताब
हो
केटा
但当我试图用代码创建单词列表时:

file=codecs.open(r'C:\Users\Admin\Desktop\nepali.txt', 'r', 'UTF-8')
nepali = list(file.read().split())
print nepali
输出现在显示如下

[u'\ufeff\u092f\u094b', u'\u0915\u093f\u0924\u093e\u092c', u'\u091f\u0947\u092c\u0941\u0932', u'\u092e\u093e', u'\u091b', u'\u092f\u094b', u'\u090f\u0915', u'\u0915\u093f\u0924\u093e\u092c', u'\u0939\u094b',]
输出应该如下所示:

[यो, किताब, टेबुल, मा, छ,यो, एक, किताब, हो]

您正在查看的是的输出,它始终用于显示容器的内容。输出用于调试,而不是最终用户显示;任何不可打印的非ASCII码点都由转义序列表示(根据码点的不同,转义序列可以是单字符转义,如
\t
\n
,或使用2、4或8个十六进制数字,如
\xe5
\u2603
\U0001f4e2

您必须手动生成输出:

print u'[{}]'.format(u', '.join(nepali))
这将生成一个unicode字符串,其格式类似于列表对象,但不使用
repr()
,只需在字符串周围添加方括号,并加上
,'
(逗号和空格)

演示:


但是,如果要向最终用户显示此字符,为什么要使用方括号?

注意,如果字符可打印,Python 3将在列表中显示Unicode:
['\ufeffयो', 'किताब', 'टेबुल', 'मा', 'छ', 'यो', 'एक', 'किताब', 'हो']
第一个字符串中的
'\ufeff'
是一个字节顺序标记(BOM)。
utf-8-sig
编解码器将在读取文件时自动检测并删除它。
>>> nepali = [u'\ufeff\u092f\u094b', u'\u0915\u093f\u0924\u093e\u092c', u'\u091f\u0947\u092c\u0941\u0932', u'\u092e\u093e', u'\u091b', u'\u092f\u094b', u'\u090f\u0915', u'\u0915\u093f\u0924\u093e\u092c', u'\u0939\u094b',]
>>> print u'[{}]'.format(u', '.join(nepali))
[यो, किताब, टेबुल, मा, छ, यो, एक, किताब, हो]