Python 3:将 UTF-8 unicode 印地语文字转换为 Unicode
Python 3 : Converting UTF-8 unicode Hindi Literal to Unicode
我有一串 UTF-8 文字
'\xe0\xa4\xb9\xe0\xa5\x80 \xe0\xa4\xac\xe0\xa5\x8b\xe0\xa4\xb2' 转换为
印地语中的हीबोल。我无法将 string a
转换为字节
a = '\xe0\xa4\xb9\xe0\xa5\x80 \xe0\xa4\xac\xe0\xa5\x8b\xe0\xa4\xb2'
#convert a to bytes
#also tried a = bytes(a,'utf-8')
a = a.encode('utf-8')
s = str(a,'utf-8')
The string is converted to bytes but contains wrong unicode literals
RESULT : b'\xc3\xa0\xc2\xa4\xc2\xb9\xc3\xa0\xc2\xa5\xc2\x80 \xc3\xa0\xc2\xa4\xc2\xac\xc3\xa0\xc2\xa5\xc2\x8b\xc3\xa0\xc2\xa4\xc2\xb2'
打印 - हॠबà¥à¤²
EXPECTED : 应该是 b'\xe0\xa4\xb9\xe0\xa5\x80\xe0\xa4\xac\xe0\xa5\x8b\xe0\xa4\xb2
这将是 ही बोल
使用raw-unicode-escape编解码器将字符串编码为字节,然后可以解码为UTF-8。
>>> s = '\xe0\xa4\xb9\xe0\xa5\x80 \xe0\xa4\xac\xe0\xa5\x8b\xe0\xa4\xb2'
>>> s.encode('raw-unicode-escape').decode('utf-8')
'ही बोल'
这是一种解决方法;理想的解决方案是防止数据源将原始字节串化。
您的原始字符串可能被解码为 latin1
。如果可能,将其解码为 UTF-8,但如果收到的内容混乱,您可以通过再次编码为 latin1
并正确解码为 UTF-8:
来反转它
>>> s = '\xe0\xa4\xb9\xe0\xa5\x80 \xe0\xa4\xac\xe0\xa5\x8b\xe0\xa4\xb2'
>>> s.encode('latin1').decode('utf8')
'ही बोल'
注意latin1
编码匹配前256个Unicode代码点,所以U+00E0
('\xe0'
in a Python 3 str
对象)变成字节E0h(b'\xe0'
在 Python 3 bytes
对象中)。这是 U+0000-U+00FF 和字节 00h-FFh 之间的 1:1 映射。
我有一串 UTF-8 文字
'\xe0\xa4\xb9\xe0\xa5\x80 \xe0\xa4\xac\xe0\xa5\x8b\xe0\xa4\xb2' 转换为
印地语中的हीबोल。我无法将 string a
转换为字节
a = '\xe0\xa4\xb9\xe0\xa5\x80 \xe0\xa4\xac\xe0\xa5\x8b\xe0\xa4\xb2'
#convert a to bytes
#also tried a = bytes(a,'utf-8')
a = a.encode('utf-8')
s = str(a,'utf-8')
The string is converted to bytes but contains wrong unicode literals
RESULT : b'\xc3\xa0\xc2\xa4\xc2\xb9\xc3\xa0\xc2\xa5\xc2\x80 \xc3\xa0\xc2\xa4\xc2\xac\xc3\xa0\xc2\xa5\xc2\x8b\xc3\xa0\xc2\xa4\xc2\xb2'
打印 - हॠबà¥à¤²
EXPECTED : 应该是 b'\xe0\xa4\xb9\xe0\xa5\x80\xe0\xa4\xac\xe0\xa5\x8b\xe0\xa4\xb2
这将是 ही बोल
使用raw-unicode-escape编解码器将字符串编码为字节,然后可以解码为UTF-8。
>>> s = '\xe0\xa4\xb9\xe0\xa5\x80 \xe0\xa4\xac\xe0\xa5\x8b\xe0\xa4\xb2'
>>> s.encode('raw-unicode-escape').decode('utf-8')
'ही बोल'
这是一种解决方法;理想的解决方案是防止数据源将原始字节串化。
您的原始字符串可能被解码为 latin1
。如果可能,将其解码为 UTF-8,但如果收到的内容混乱,您可以通过再次编码为 latin1
并正确解码为 UTF-8:
>>> s = '\xe0\xa4\xb9\xe0\xa5\x80 \xe0\xa4\xac\xe0\xa5\x8b\xe0\xa4\xb2'
>>> s.encode('latin1').decode('utf8')
'ही बोल'
注意latin1
编码匹配前256个Unicode代码点,所以U+00E0
('\xe0'
in a Python 3 str
对象)变成字节E0h(b'\xe0'
在 Python 3 bytes
对象中)。这是 U+0000-U+00FF 和字节 00h-FFh 之间的 1:1 映射。