2012-08-06 54 views

回答

14

你需要知道要衡量你的字节大小什么编码:

>>> print u'\uC815\uC815' 
정정 
>>> print len(u'\uC815\uC815') 
2 
>>> print len(u'\uC815\uC815'.encode('UTF-8')) 
6 
>>> print len(u'\uC815\uC815'.encode('UTF-16-LE')) 
4 
>>> print len(u'\uC815\uC815'.encode('UTF-16')) 
6 
>>> print len(u'\uC815\uC815'.encode('UTF-32-LE')) 
8 
>>> print len(u'\uC815\uC815'.encode('UTF-32')) 
12 

你真的要检讨Python Unicode HOWTO充分体会到一个Unicode对象,它的字节之间的区别编码。

另一个很好的文章,The Absolute Minimum Every Software Developer Absolutely, Positively Must Know About Unicode and Character Sets (No Excuses!),由Joel Spolsky的(后面的堆栈溢出的人之一)。

+0

你是怎么知道这个字符是'\ uC815'的?这是什么编码?我确实尝试过utf-8/16/32,但没有一个是正确的,但'\ uC815'似乎正在工作。 – jasondinh 2012-08-06 17:21:58

+0

我有一个名为UnicodeChecker的应用程序供我参考,但'C815'是unicode代码点。如果您知道UTF-8或UTF-16字节序列,则可以*解码*以获取Unicode字符(''\ xEC \ xA0 \ x95'.decode('UTF-8')')。 python提示符在这里很有帮助;例如,当向终端回显(而不是打印)unicode值时,python将使用它的'unicode_escape'编码。 – 2012-08-06 17:28:04

+2

UTF-16编码的长度意味着包含了UTF-16 BOM。我不知道Python是否支持'encode('UTF-16BE')'来避免它。 – bames53 2012-08-06 18:53:49

4

代表unicode所需的字节数取决于使用的编码。

>>> s = u'정정' 
>>> len(s) 
2 
>>> len(s.encode('UTF-8')) 
6 
>>> len(s.encode('UTF-16')) 
6 
>>> len(s.encode('UTF-32')) 
12 

如果你打算重用编码结果,我建议进行一次编码,然后拉动其len后来重用已编码的结果。

0

确保您使用的是正确的standard encoding

如果你没有,你可以随时decodedString = myString.decode('UTF-8')(替代UTF-8与正确的编码字符串,你可以从以前的链接发现,如果不是UTF-8),以获得该字符串的格式,其中len(decodedString)应该返回适当数量