如何使用python3将符号转换为各自的unicode表示?

时间:2017-05-13 12:42:25

标签: python python-3.x unicode python-3.5

我想转换devanagri脚本字符,例如'अ'进入其unicode表示\u0905。 早在python2.7中,我使用的是each_character.encode("unicode_escape"),其中each_character指的是devanagri脚本字符。 但是最近我开始研究python3,当我运行上面的代码片段时,我得到以下错误?

expected str instance, bytes found

任何人都可以建议一种将所有字符转换为unicode表示的方法。我正在研究devanagri OCR,我需要Unicode表示,以便将它们作为基本事实传递。

2 个答案:

答案 0 :(得分:1)

如果您有一个unicode字符串,请执行以下操作:

text = u'अ'

在Python 2中,您可以使用repr()来获取转义表示:

>>> repr(u'अ')
"u'\\u0905'"

但是,在Python 3中,非ASCII字符不会被转义:

>>> repr(text)
"'अ'"

您想要的是转义非ASCII字符。你可以这样做:

>>> u'अ'.encode('ascii', errors='backslashreplace')
b'\\u0905'

结果是Python 3中的bytes字符串(Python 2中为str),因此如果需要unicode字符串,则需要对其进行解码,如下所示:

>>> u'अ'.encode('ascii', errors='backslashreplace').decode('ascii')
'\\u0905'

结果是一个unicode字符串。

参考Python 3文档:Converting to Bytes

答案 1 :(得分:0)

您正在处理字节对象,而不是字符串。您应该使用bytes.decode方法将字节转换为字符串。

>>> b = b'\xe0\xa4\x85'
>>> b.decode('utf-8').encode('unicode_escape')
b'\\u0905'
>>> print(b.decode('utf-8').encode('unicode_escape').decode())
\u0905

注意:您应该根据使用的编码更改utf-8

注意:如果你正在迭代bytes对象,你应该先改变代码来解码bytes对象,然后迭代;否则,解码将失败或产生错误的结果。