繁体   English   中英

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

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM