获取字符串的unicode字符

时间:2014-06-23 14:07:44

标签: python unicode pyside

我从qt小部件中获取字符串,并且我尝试将非ascii字符(例如。€)转换为十六进制unicode字符(例如.x20ac)

目前,我正在努力查看unicode字符:

currentText = self.rich_text_edit.toPlainText() # this string is the € symbol
print("unicode char is: {0}".format(unicode_text))

这为我提供了错误:

UnicodeEncodeError:' ascii'编解码器不能对字符u' \ u20ac'进行编码。位置0:序数不在范围内(128)

实际上我想要的就是20ac。

我该怎么做?

如果我这样做:

unicode_text = str(unicode_text).encode('string_escape')
print unicode_text #returns \xe2\x82\xac

它会返回3个字符,所有这些字符都错了,我会围成一圈:)

我知道这是一个相当基本的问题,但我以前从未担心过unicode。

非常感谢, 伊恩

2 个答案:

答案 0 :(得分:4)

使用ordhex

>>> hex(ord(u"€"))
 '0x20ac'

答案 1 :(得分:4)

\xe2\x82\xac是Unicode \x20ac的UTF-8编码。

将其想象如下,Unicode是整数和类似于ASCII的字符之间的1对1映射,除了Unicode的整数到字符映射的数量要高得多。

您的符号的整数值为8364(或十六进制为\x20ac),这个值太大,无法容纳8位值256 - 所以{ {1}}被分解为\x20ac的3个单独字节。这是一个非常高级别的概述,但我真的建议您看看Scott Hanselman的这个出色的解释:

Why the #AskObama Tweet was Garbled on Screen.

至于你的问题,你可以简单地做

\xe2\x82\xac