Python中的Unicode utf-8/utf-16编码

8st*_*ve8 6 python unicode encoding decoding

在python中:

u'\u3053\n'
Run Code Online (Sandbox Code Playgroud)

是utf-16吗?

我并不是真的知道所有unicode /编码的东西,但这种类型的东西出现在我的数据集中,就像我有a=u'\u3053\n'.

print 给出异常并且解码给出异常.

a.encode("utf-16") > '\xff\xfeS0\n\x00'
a.encode("utf-8") > '\xe3\x81\x93\n'

print a.encode("utf-8") > ?üô
print a.encode("utf-16") >  ?S0
Run Code Online (Sandbox Code Playgroud)

这里发生了什么?

sth*_*sth 8

它是一个unicode字符,似乎在您的终端编码中无法显示.print尝试在终端的编码中对unicode对象进行编码,如果无法完成,则会出现异常.

在可以显示utf-8的终端上,您将获得:

>>> print u'\u3053'
?
Run Code Online (Sandbox Code Playgroud)

您的终端似乎无法显示utf-8,否则至少该print a.encode("utf-8")行应该生成正确的字符.


Ale*_*lli 7

你问:

U '\ u3053\N'

是utf-16吗?

答案是否定的:它是unicode,而不是任何特定的编码.utf-16是一种编码.

要有效地将Unicode字符串打印到终端,您需要找出该终端愿意接受和能够显示的编码.例如,我的笔记本电脑上的Terminal.app设置为UTF-8并且具有丰富的字体,因此:

截图http://www.aleax.it/Picture%203.png

......平假名字母显示正确.在Linux工作站上,我有一个终端程序,它会一直重置为Latin-1,所以它会像你的一样乱码 - 我可以将它设置为utf-8,但字体中没有大量的字形,所以它会显示一些无用的占位符字形.