使用UTF-8编码字符打印字符串,例如:"\u00c5\u009b\"。

3
我希望打印像这个编码的字符串:"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'\\')无效。


@Ihay86 很遗憾它不起作用。它返回相同的字节列表。 - daniel
1
顺便提一下,不要使用 str 作为变量名,因为它会遮盖内置的 str 类型。 - PM 2Ring
1
真正的问题是:为什么你的字符串要编码成那样?理想情况下,它们应该在上游进行修复。你不应该像那样将UTF-8字节编码到文本字符串中!Matias的答案可行,另一种处理这种乱码的方法是s.encode('latin1').decode('utf8') - PM 2Ring
@PM2Ring 如果您以 .json 格式下载您的 Facebook 信息,这就是您所获得的内容。 - daniel
1
好的。这是一个已知问题,请参见Facebook JSON badly encoded。在 Facebook 工作的 Martijn Pieters♦ 已经提交了内部错误报告。 - PM 2Ring
显示剩余2条评论
1个回答

6
使用 raw_unicode_escape
text = 'Cze\u00c5\u009b\u00c4\u0087'
text_bytes = text.encode('raw_unicode_escape')
print(text_bytes.decode('utf8')) # outputs Cześć

1
这是JSON数据,应该将其解码为JSON。当然,它也是乱码,但raw_unicode_escape不是正确的工具,在输入中如果有字面上的反斜杠后跟已知的Python转义序列(但JSON会忽略),可能会导致问题。 - Martijn Pieters

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接