Python 3: 将UTF-8 Unicode印地语文本转换为Unicode

2024-04-25 11:57:38 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个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

结果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'打印-हॠबà¥à¤²

预期值:应该是b'\xe0\xa4\xb9\xe0\xa5\x80\xe0\xa4\xac\xe0\xa5\x8b\xe0\xa4\xb2,即हीोल


Tags: tostringbytesutfxa0x8bx80xa5
2条回答

原始字符串可能被解码为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'在python3str对象中)变成字节E0h(b'\xe0'在python3bytes对象中)。它是U+0000-U+00FF和字节00h-FFh之间的1:1映射。你知道吗

使用原始unicode转义编解码器将字符串编码为字节,然后可以解码为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')
'ही बोल'

这是一种解决方法;理想的解决方案是防止数据源对原始字节进行字符串化。你知道吗

相关问题 更多 >

    热门问题