我有一个 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
可能出了什么问题?
最佳答案
\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'
关于python - Python 中的 UTF-8 编码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35166992/