[英]Unicode utf-8/utf-16 encoding in Python
在python中:
u'\u3053\n'
是utf-16吗?
我并不是真的知道所有unicode /编码的东西,但是这种类型的东西出现在我的数据集中,就像我有a=u'\こ\\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
这里发生了什么?
它是一个unicode字符,似乎在您的终端编码中无法显示。 print
尝试在终端的编码中对unicode对象进行编码,如果无法完成,则会出现异常。
在可以显示utf-8的终端上,您将获得:
>>> print u'\u3053'
こ
您的终端似乎无法显示utf-8,否则至少print a.encode("utf-8")
行应该生成正确的字符。
你问:
U '\\ u3053 \\ N'
是utf-16吗?
答案是否定的:它是unicode,而不是任何特定的编码。 utf-16是一种编码。
要有效地将Unicode字符串打印到终端,您需要找出该终端愿意接受和能够显示的编码。 例如,我的笔记本电脑上的Terminal.app设置为UTF-8并且具有丰富的字体,因此:
(来源: aleax.it )
......平假名字母显示正确。 在Linux工作站上,我有一个终端程序,它会一直重置为Latin-1,所以它会像你的一样乱码 - 我可以将它设置为utf-8,但字体中没有大量的字形,所以它会显示一些无用的占位符字形。
字符U + 3053“HIRAGANA LETTER KO”。
UTF-16二进制格式开头的\\xff\\xfe
位是编码的字节顺序标记(U + FEFF),然后“S0”是\\x5e\\x30
,然后是原始字符串中的\\n
。 (每个字符的字节都“反转”,因为它使用的是小端UTF-16编码。)
UTF-8表单以三个字节表示相同的平假名字符,其中的位模式如此处所述 。
现在,至于你是否应该在数据集中真正拥有它......这些数据来自何处? 它中有平假名字符是否合理?
这是Python 2.6.2的Unicode HowTo Doc:
http://docs.python.org/howto/unicode.html
另请参阅该文档参考部分中的链接以获取其他解释,包括Joel Spolsky的解释。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.