2009-08-04 37 views
4

在蟒:的Unicode UTF-8/UTF-16编码在Python

u'\u3053\n' 

它是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 

这是怎么回事?

+1

http://www.fileformat.info/info/unicode/char/3053/index.htm – 8steve8 2009-08-04 19:32:02

回答

8

这是一个unicode字符,似乎不能在终端编码中显示。 print尝试在您的终端的编码中对unicode对象进行编码,如果无法完成,您将得到一个异常。

在可以显示UTF-8,你得到一个终端:

>>> print u'\u3053' 
こ 

你的终端似乎并不能够显示UTF-8,否则至少print a.encode("utf-8")行应产生正确的字符。

+0

谢谢是的,PowerShell,甚至PowerShell ISE似乎没有“compatable”(因缺乏更好的理解)与unicode在python中。 http://stackoverflow.com/questions/2105022/unicode-in-powershell-with-python-alternative-shells-in-windows – 8steve8 2010-02-05 17:21:03

1

Character U + 3053“HIRAGANA LETTER KO”。

在UTF-16的二进制格式的开始时的\xff\xfe位是编码的字节顺序标记(U + FEFF),则“S0”是\x5e\x30,那么就从原来的字符串\n。 (每个字符的字节“颠倒”,因为它使用的是小尾数UTF-16编码。)

UTF-8格式表示三个字节中的相同平假名字符,位模式为documented here

现在,至于你是否真的应该在你的数据集中......这些数据来自哪里?它有平假名字符吗?

6

你问:

U '\ u3053 \ n'

它是UTF-16?

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

要有效地向您的终端打印Unicode字符串,您需要找出终端愿意接受并能够显示的编码。例如,终端。我的笔记本电脑的应用程序设置为UTF-8,并用丰富的字体,所以:

screenshot http://www.aleax.it/Picture%203.png

...的平假名正确显示。在Linux工作站我有一个不断复位到终端程序的Latin-1,因此将裂伤的东西有点像你 - 我可以将它设置为UTF-8,但它并没有在字体字形的数量巨大,所以它会显示有些无用的占位符字形。