繁体   English   中英

获取字符串的unicode字符

[英]Getting the unicode characters of a string

我从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。

提前非常感谢,伊恩

使用ordhex

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

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

可以这样认为:Unicode是整数与类似于ASCII的字符之间的一对一映射,不同之处在于Unicode的整数到字符映射数要高得多。

您的符号的整数值为8364 (或\\x20ac以十六进制表示),该值太大而无法容纳8位值\\x20ac因此\\x20ac被分解为3个单独的字节\\xe2\\x82\\xac 这是一个非常高级的概述,但是我真的建议您看一下Scott Hanselman的出色解释:

为什么#AskObama Tweet在屏幕上显示乱码。

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

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