嗯,字符编码和解码有时让我很沮丧。
所以我们知道u'\u4f60\u597d'
是utf-8
编码的你好
,
>>> print hellolist
[u'\u4f60\u597d']
>>> print hellolist[0]
你好
现在我真正想要的输出结果或写入文件的内容是[u'你好']
,但一直都是[u'\u4f60\u597d']
,那么如何处理呢?
嗯,字符编码和解码有时让我很沮丧。
所以我们知道u'\u4f60\u597d'
是utf-8
编码的你好
,
>>> print hellolist
[u'\u4f60\u597d']
>>> print hellolist[0]
你好
现在我真正想要的输出结果或写入文件的内容是[u'你好']
,但一直都是[u'\u4f60\u597d']
,那么如何处理呢?
u''
不是utf-8,而仅仅是Unicode(除了在Python <= 3.2的Windows版本中,它是utf-16
)。
utf-8是Unicode的一种编码,必然是一系列bytes
。u'你'
和u'\u4f60'
是完全相同的。只是在Python2中,高字符的repr
使用转义而不是原始值。.encode
和.decode
时更加清晰。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))
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")
一个是Unicode字符本身,
hellolist = u'\u4f60\'
另一个是如何表示它。
你可以根据显示的位置使用许多不同的方式来表示它。
Web:UTF-8 数据库:可能是UTF-16或UTF-8 日本的Web:EUC-JP或Shift JIS
例如 本 http://unicode.org/cgi-bin/GetUnihanData.pl?codepoint=672c http://www.fileformat.info/info/unicode/char/672c/index.htm
u''
是utf-16编码是无关紧要的 - 它在内部使用某种编码,但具体使用哪种编码是实现细节(而且您的细节有点错误:Unicode字符的内部表示方式曾经取决于解释器的编译方式;现在它取决于字符串中的字符)。但是对于u'你'
和u'\u4f60'
是相同的事物加1分,这是重点 - 这些是打印相同对象的不同方式,两种拼写在所有情况下都将被Python相同地处理。 - lvcu'\u4f60'
会在打印或写入文件之前被打印/转换为u'\\u4f60'
,这就是OP所说的问题,这是由于列表内部使用repr()
引起的。 - Anand S Kumar