如何在python中输出utf-8字符串列表?

时间:2015-07-03 03:44:45

标签: python utf-8 character-encoding

嗯,字符编码和解码有时会让我很沮丧。

因此我们知道u'\u4f60\u597d'utf-8的{​​{1}}编码,

你好

现在我真正希望从输出中获取或写入文件的是>>> print hellolist [u'\u4f60\u597d'] >>> print hellolist[0] 你好 ,但它始终是[u'你好'],那么你是如何做到的?

4 个答案:

答案 0 :(得分:4)

你是误会。

python中的

u''而不是 utf-8,它只是Unicode(除了在Python上的Windows&lt; = 3.2,而它是utf-16)。< / p>

utf-8是Unicode的编码,必须是bytes的序列。

此外,u'你'u'\u4f60'完全相同。简单来说,在Python2中,repr高字符使用转义而不是原始值。

由于Python2现在很快就要进入EOL,你应该开始认真考虑切换到Python3。在Python3中跟踪所有这些内容要容易得多,因为只有一种字符串类型,当.encode.decode时它更加清晰。

答案 1 :(得分:4)

当您打印(或写入文件)列表时,它在内部调用列表的str()方法,但列表内部调用其元素上的repr()repr()返回您看到的丑陋的unicode表示。

repr示例 -

>>> h = u'\u4f60\u597d'
>>> print h
\u4f60\u597d
>>> print repr(h)
u'\u4f60\u597d'

您需要手动获取列表中的元素并打印它们才能正确打印。

示例 -

>>> h1 = [h,u'\u4f77\u587f']
>>> print u'[' + u','.join([u"'" + unicode(i) + u"'" for i in h1]) + u']'

对于包含可能具有unicode字符的子列表的列表,您需要一个递归函数,例如 -

>>> h1 = [h,(u'\u4f77\u587f',)]
>>> def listprinter(l):
...     if isinstance(l, list):
...             return u'[' + u','.join([listprinter(i) for i in l]) + u']'
...     elif isinstance(l, tuple):
...             return u'(' + u','.join([listprinter(i) for i in l]) + u')'
...     elif isinstance(l, (str, unicode)):
...             return u"'" + unicode(l) + u"'"
... 
>>> 
>>> 
>>> print listprinter(h1)

要将它们保存到文件,请使用相同的列表推导或递归功能。示例 -

with open('<filename>','w') as f:
    f.write(listprinter(l))

答案 2 :(得分:0)

 with open("some_file.txt","wb") as f:
    f.write(hellolist[0].encode("utf8"))

我认为会解决您的问题

大多数文本编辑器都使用utf8编码:)

虽然其他答案都是正确的,但没有一个真正解决了您的问题

>>> u'\u4f60\u597d'.encode("utf8")
'\xe4\xbd\xa0\xe5\xa5\xbd'

如果你想要括号

>>> u'[u\u4f60\u597d,]'.encode("utf8")

答案 3 :(得分:0)

一件事是unicode角色本身

hellolist = u&#39; \ u4f60 \&#39;

另一个是如何代表它。

您可以通过多种方式表示它,具体取决于您要显示的位置。

Web:UTF-8 数据库:可能是UTF-16或UTF-8 日本网站:EUC-JP或Shift JIS

例如本 http://unicode.org/cgi-bin/GetUnihanData.pl?codepoint=672c http://www.fileformat.info/info/unicode/char/672c/index.htm