![](/img/trans.png)
[英]Getting rid of special characters and unicode in byte object converted to string in Python
[英]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。
提前非常感谢,伊恩
使用ord
和hex
:
>>> 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的出色解释:
至于你的问题,你可以简单地做
>>> print "unicode code point is: {0}".format(hex(ord(unicode_text)))
unicode code point is: 0x20ac
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.