【发布时间】:2026-02-02 16:15:01
【问题描述】:
我想打印这样编码的字符串:"Cze\u00c5\u009b\u00c4\u0087",但我不知道怎么做。示例字符串应打印为:“Cześć”。
我试过的是:
str = "Cze\u00c5\u009b\u00c4\u0087"
print(str)
#gives: CzeÅÄ
str_bytes = str.encode("unicode_escape")
print(str_bytes)
#gives: b'Cze\\xc5\\x9b\\xc4\\x87'
str = str_bytes.decode("utf8")
print(str)
#gives: Cze\xc5\x9b\xc4\x87
在哪里
print(b"Cze\xc5\x9b\xc4\x87".decode("utf8"))
给出“Cześć”,但我不知道如何将 "Cze\xc5\x9b\xc4\x87" 字符串转换为 b"Cze\xc5\x9b\xc4\x87" 字节。
我也知道问题是在使用 "unicode_escape" 参数对基本字符串进行编码后,字节表示中的额外反斜杠,但我不知道如何摆脱它们 - str_bytes.replace(b'\\\\', b'\\') 不起作用。
【问题讨论】:
-
关于你的最后一点,
str_bytes = str_bytes.replace(b'\\\\', b'\\')应该解决这个问题 - 你可能没有将它分配回变量。 -
@Ihay86 不幸的是它不起作用。它返回相同的字节列表。
-
顺便说一句,不要使用
str作为变量名,因为这会影响内置的str类型。 -
真正的 问题是:为什么你有这样编码的字符串?理想情况下,它们应该固定在上游。您不应该将 UTF-8 字节编码为这样的文本字符串! Matias 的回答有效,另一种处理这种 mojibake 的方法是
s.encode('latin1').decode('utf8')。 -
好的。这是一个已知问题,请参阅Facebook JSON badly encoded。在 Facebook 工作的 Martijn Pieters♦ 提交了一份内部错误报告。
标签: python python-3.x python-unicode