循环遍历unicode字符串时的奇怪行为

时间:2014-07-21 13:28:49

标签: python unicode

当我这样做时:

text = u"奥巴马讲话"
for c in text:
    print c

我得到了预期的结果:

奥
巴
马
讲
话

但如果我这样做:

text = u"€"
for c in text:
    print c

我得到了:

�
�
€

我期待得到:

这是为什么?我认为这与以下事实有关:

In [1]: u"".encode("utf8")
Out[1]: '\xf0\xa4\xad\xa2'

“”使用4个字节进行编码。

如何循环使用具有此类编码的unicode字符串?

像你这样的东西。

1 个答案:

答案 0 :(得分:3)

在基本多语言平面之外;它有代码点U + 24B62。这意味着要正确处理它,您需要一个具有sys.maxunicode == 1114111的Python构建。有关详细信息,请参阅Unicode in Python - just UTF-16?

如果可以,请升级到Python 3.3,这一切都正确处理。否则,您需要通过配对低代理代码点和高代理代码点来实现UTF-16处理:How to iterate over Unicode characters in Python 3?