在Python 3中,与Python 2相比,内置repr()函数的行为发生了变化



在Python 3中,与Python 2相比,内置repr((函数的行为发生了变化。

在蟒蛇2中

repr("Дует Світязь")
"'\xd0\x94\xd1\x83\xd0\xb5\xd1\x82 \xd0\xa1\xd0\xb2\xd1\x96\xd1\x82\xd1\x8f\xd0\xb7\xd1\x8c'"

在Python3 中

repr("Дует Світязь")
"'Дует Світязь'"

我如何让repr((在Python3中像在Python2中一样工作,或者作为另一种将字符串转换为转义字符的方法在我的代码中。我将查找表中的转义字符用于LCD显示转换例程。

该平台是Raspberry Pi操作系统(Raspbian(。

我也尝试过使用replib((,但没有成功。它给出的输出与repr((相同。使用string.encode在一定程度上证明了解决方案,但结果与Python2rep((不同

txt = "Дует Світязь"
txt.encode('utf8')
b'xd0x94xd1x83xd0xb5xd1x82 xd0xa1xd0xb2xd1x96xd1x82xd1x8fxd0xb7xd1x8c'

您可以将字符串编码为字节对象:

print('Дует Світязь'.encode('utf-8'))

打印:

b'xd0x94xd1x83xd0xb5xd1x82 xd0xa1xd0xb2xd1x96xd1x82xd1x8fxd0xb7xd1x8c'

编辑:

s = str('Дует Світязь'.encode('utf-8')).lstrip('b').replace('\', r'\')
print(s)

打印:

'\xd0\x94\xd1\x83\xd0\xb5\xd1\x82 \xd0\xa1\xd0\xb2\xd1\x96\xd1\x82\xd1\x8f\xd0\xb7\xd1\x8c'

我感谢Andrej Kesely,他让我走上了解决方案的正确道路

在Python2中

s = repr(text)

在Python3 中

s = str(text.encode('utf-8')).lstrip('b')

我真的不明白为什么Python3的作者觉得有必要改变repr((等内置函数的工作方式。毫无疑问,他们有自己的理由。

最新更新