我想转换devanagri脚本字符,例如'अ'进入其unicode表示\u0905
。
早在python2.7中,我使用的是each_character.encode("unicode_escape")
,其中each_character
指的是devanagri脚本字符。
但是最近我开始研究python3,当我运行上面的代码片段时,我得到以下错误?
expected str instance, bytes found
任何人都可以建议一种将所有字符转换为unicode表示的方法。我正在研究devanagri OCR,我需要Unicode表示,以便将它们作为基本事实传递。
答案 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对象,然后迭代;否则,解码将失败或产生错误的结果。