UTF-8编码波兰字符保存到文本文件后乱码,如何正确保存?
问题分析与解决方法
问题核心是你混淆了字节序列和Unicode字符串的区别:
- 你想要的字符
Ć(Unicode码点U+0106),其UTF-8编码对应的字节序列是b'\xc4\x86' - 但你代码里的
"ABC\xc4\x86def"是Unicode字符串,其中\xc4对应Unicode字符U+00C4(显示为Ä),\x86对应U+0086(部分环境显示为†)。直接用UTF-8写入时,这两个字符会被重新编码成b'\xc3\x84\xc2\x86',最终文件解码后自然显示为ABCĆdef。
以下是三种正确的解决方式:
方法1:直接使用正确的Unicode字符
直接在字符串中写入Ć,Python会自动处理其UTF-8编码:
string = "ABCĆdef" with open("messagessemi.txt", "w", encoding="utf-8") as f: f.write(string)
方法2:从错误字符串还原正确的Unicode
把错误的字符串按Latin-1编码转为字节(保留原始的\xc4\x86字节),再用UTF-8解码得到正确字符:
original_str = "ABC\xc4\x86def" # 转字节:每个Unicode字符对应一个原始字节 byte_data = original_str.encode('latin-1') # 用UTF-8解码得到Ć correct_str = byte_data.decode('utf-8') with open("messagessemi.txt", "w", encoding="utf-8") as f: f.write(correct_str)
方法3:直接写入正确的UTF-8字节序列
如果你的原始数据是字节形式,直接用二进制模式写入:
byte_content = b"ABC\xc4\x86def" with open("messagessemi.txt", "wb") as f: f.write(byte_content)
内容的提问来源于stack exchange,提问作者kazimierz___tetmajer
相关产品推荐
相关产品推荐

