在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((等内置函数的工作方式。毫无疑问,他们有自己的理由。