我正在从网络服务请求一个字符串。当我从程序中打印时:
variable = getFromNetwork()
print(variable)
我使用python3 net.py
执行它,我得到:
xd8xaaxd9x85xd9x84xd9x8a612
当我在python3 CLI:中执行时
>>> print("xd8xaaxd9x85xd9x84xd9x8a612")
تÙ
Ù
Ù612
当我在python2CLI中执行时,我会得到正确的结果:
>>> print("xd8xaaxd9x85xd9x84xd9x8a612")
تملي612
我如何通过python3在我的程序中打印这个?
编辑
执行以下行之后:
print(print(type(variable), repr(variable)))
得到
<class 'str'> '\xd8\xaa\xd9\x85\xd9\x84\xd9\x8a612'
我想我应该先删除\x
使其成为十六进制,然后对其进行解码。你的解决方案是什么!?
您需要指定编码,这样解释器就知道如何解释数据:
s = "xd8xaaxd9x85xd9x84xd9x8a612"
y = s.encode('raw_unicode_escape')
print (y) # is a bytes object now!
print (y.decode('utf-8'))
输出:
b'xd8xaaxd9x85xd9x84xd9x8a612'
تملي612
您的变量是一个(unicode(字符串,其中包含UTF8编码字节字符串的代码。这可能是因为它被错误地解码为错误的编码(这里可能是Latin1(。
您可以通过首先转换为字节字符串而不更改代码(因此使用Latin1编码(来修复它,然后您将能够正确解码它:
variable = getFromNetwork().encode('Latin1').decode()
print(variable)
演示:
variable = "xd8xaaxd9x85xd9x84xd9x8a612"
print(variable.encode('Latin1').decode())
تملي612
在python 3中,我使用以下代码进行了测试
line='xd8xaaxd9x85xd9x84xd9x8a612'
line = line.encode('raw_unicode_escape')
line=line.decode("utf-8")
print(line)
它打印
تملي612