Python 3打印utf-8编码的字符串问题



我正在从网络服务请求一个字符串。当我从程序中打印时:

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