Python中UTF-16 LE转ANSI时出现乱码及字符间隔问题如何解决
编码转换代码问题修复方案
现有代码错误点
- 核心逻辑颠倒:你需要实现的是UTF-16LE转ANSI,但现有代码读取源文件时使用了ANSI(
mbcs)编码解析,写入时反而用了UTF-16LE编码,和需求完全反向。 - 异常现象对应原因:
- 单词、数字间的多余空格:UTF-16LE是双字节编码,单字节的英文、数字字符后会附带
\x00空字节,用ANSI错误解析时空字节会被识别为空格,就出现了多余间隔。 - 开头的
ÿþ乱码:这是UTF-16LE的BOM(字节顺序标记)被ANSI编码错误解析后的显式字符。
- 单词、数字间的多余空格:UTF-16LE是双字节编码,单字节的英文、数字字符后会附带
- 遗漏异常处理逻辑:ANSI(
mbcs)是依赖系统区域的窄编码,只能兼容当前系统区域支持的字符,如果源文件存在ANSI无法表示的字符,代码会直接抛出编码错误,需要补充错误处理规则。 - 遗漏BOM处理逻辑:如果你的UTF-16LE文件带有BOM头,读取后内容开头会自带不可见的
\ufeff字符,需要主动去除避免写入后出现多余字符。
修正后代码
import glob import codecs for each in glob.glob('path/**/*.txt', recursive=True): # 以UTF-16LE编码读取源文件 with codecs.open(each, 'r', encoding='utf-16le') as file: lines = file.read() # 去除可能存在的BOM头 lines = lines.lstrip('\ufeff') # 以ANSI编码写入文件,errors参数可根据需求调整为ignore/backslashreplace等 with codecs.open(each, 'w', encoding='mbcs', errors='replace') as file: file.write(lines)
内容的提问来源于stack exchange,提问作者Alex
相关产品推荐
相关产品推荐

