我有一个用`_‘编码的UTF-8字符,例如'_ea_b4_80’。我试图使用替换方法将其转换为UTF-8字符,但无法得到正确的编码。
这是一个代码示例:
import sys
reload(sys)
sys.setdefaultencoding('utf8')
r = '_ea_b4_80'
r2 = '\xea\xb4\x80'
r = r.replace('_', '\\x')
print r
print r.encode("utf-8")
print r2在本例中,r与r2不同;这是一个输出。
\xea\xb4\x80
\xea\xb4\x80
관 <-- correctly shown 可能出什么事了?
发布于 2016-02-03 01:41:41
\x只在字符串文本中有意义,您不能使用replace添加它。
要获得所需的结果,请转换为字节,然后解码:
import binascii
r = '_ea_b4_80'
rhexonly = r.replace('_', '') # Returns 'eab480'
rbytes = binascii.unhexlify(rhexonly) # Returns b'\xea\xb4\x80'
rtext = rbytes.decode('utf-8') # Returns '관' (unicode if Py2, str Py3)
print(rtext)这会让你得到你想要的관。
如果使用现代Py3,可以避免导入(假设r实际上是一个str;bytes.fromhex,与binascii.hexlify不同,只使用str输入,而不是bytes输入),使用bytes.fromhex类方法代替binascii.unhexlify
rbytes = bytes.fromhex(rhexonly) # Returns b'\xea\xb4\x80'https://stackoverflow.com/questions/35166992
复制相似问题