Skip to main content
 首页 » 编程设计

python之获取字符串的unicode字符

2025年05月04日22小虾米

我正在从 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' 编解码器无法对位置 0 中的字符 u'\u20ac' 进行编码:序号不在范围内 (128)

这正是我想要的,就在那里,20ac。

我怎样才能做到这一点?

如果我这样做:

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

它返回 3 个字符,全部错误,我在原地转圈:)

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

非常感谢, 伊恩

请您参考如下方法:

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

可以这样想,Unicode 是整数和类似于 ASCII 的字符之间的 1 对 1 映射,除了 Unicode 在整数到字符映射的数量上要高得多。

您的 € 符号的整数值为 8364(或十六进制的 \x20ac),它太大而无法放入256 的 8 位值 - 因此 \x20ac 被分解为 3 个单独的字节 \xe2\x82\xac。这是一个非常高层次的概述,但我真的建议您看一下 Scott Hanselman 的精彩解释:

Why the #AskObama Tweet was Garbled on Screen.

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

>>> print "unicode code point is: {0}".format(hex(ord(unicode_text))) 
unicode code point is: 0x20ac