如何修复错误编码字符:将ø转换为ř的Python编码转换方法
编码转换问题:将
ø转为ř的正确方法 我访问的网站里有个字符显示为ø,它的Unicode码点是248(十六进制0xf8),Python控制台验证如下:
>>> chr(248) 'ø'
但结合文本语义判断,这个字符是编码错误导致的,实际应该是ř——Windows-1250编码的0xf8码点对应的字符就是ř。
问题:需要执行何种编码转换才能将ø转为ř?
我尝试了两种方法都失败了:
第一种:
>>> chr(248).encode().decode('windows-1250') 'ø'
第二种:
>>> chr(248).encode('windows-1250').decode() Traceback (most recent call last): File "<stdin>", line 1, in <module> File "/usr/lib/python3.6/encodings/cp1250.py", line 12, in encode return codecs.charmap_encode(input,errors,encoding_table) UnicodeEncodeError: 'charmap' codec can't encode character '\xf8' in position 0: character maps to <undefined>
正确转换逻辑
问题核心是编码解码顺序搞反了:当前的ø是把Windows-1250编码的字节0xf8错误用UTF-8解码得到的结果。要还原正确字符,需按以下步骤操作:
- 先把错误的Unicode字符
ø转回对应的UTF-8字节; - 再用Windows-1250编码解码该字节,得到正确的
ř。
代码实现
# 错误的Unicode字符 wrong_char = 'ø' # 转成UTF-8字节(对应原网站错误解码前的字节0xf8) byte_data = wrong_char.encode('utf-8') # 用Windows-1250解码字节,得到正确字符 correct_char = byte_data.decode('windows-1250') print(correct_char) # 输出:ř
之前方法失败的原因
- 第一种方法:
encode()默认用UTF-8,ø的UTF-8编码是b'\xc3\xb8',用Windows-1250解码这两个字节会得到ø,不符合预期。 - 第二种方法:Windows-1250编码中没有Unicode码点0xf8对应的映射,直接编码会触发报错。
内容的提问来源于stack exchange,提问作者Jeyekomon
相关产品推荐
相关产品推荐

