You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python中UTF-16 LE转ANSI时出现乱码及字符间隔问题如何解决

编码转换代码问题修复方案

现有代码错误点

  • 核心逻辑颠倒:你需要实现的是UTF-16LE转ANSI,但现有代码读取源文件时使用了ANSI(mbcs)编码解析,写入时反而用了UTF-16LE编码,和需求完全反向。
  • 异常现象对应原因:
    • 单词、数字间的多余空格:UTF-16LE是双字节编码,单字节的英文、数字字符后会附带\x00空字节,用ANSI错误解析时空字节会被识别为空格,就出现了多余间隔。
    • 开头的ÿþ乱码:这是UTF-16LE的BOM(字节顺序标记)被ANSI编码错误解析后的显式字符。
  • 遗漏异常处理逻辑: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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.27 00:15:05