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

Python读取未知编码文本文件如何转UTF-8解决字符串匹配失败问题

问题根因

你读取到的字符串每个可打印字符前都带\x00空字节,是典型的UTF-16LE编码文件被系统默认编码(通常为UTF-8或GBK)错误读取导致的,所以直接和普通字符串匹配必然失败。

解决方案

方案1:打开文件时直接指定编码(推荐)

修改open函数的参数,直接指定文件编码为utf-16-le,读取到的内容直接就是正常字符串:

# 将main函数里的open行替换为如下代码
logfile = open(argv[0], mode="r", encoding="utf-16-le")

修改后无需额外处理line变量,直接匹配即可。如果解码报错,可以将utf-16-le替换为utf-16,程序会自动识别字节序适配带BOM的UTF-16文件。

方案2:运行时对已读取的字符串转码

如果无法确定文件编码,或者不想修改文件打开逻辑,可以对读取到的line做二次转码:

def detectLicenseStopping(line):
    stopStr = "Stopping license"
    # 转码逻辑:先转回原始字节流,再用utf-16-le解码为正常字符串
    clean_line = line.encode('latin1').decode('utf-16-le')
    if stopStr in clean_line:
        logger.info("Detected: " +  str(clean_line) + " " + str(type(clean_line)))
补充说明

直接调用str()转换无效的原因是:你读取到的line本身已经是str类型,只是内容中夹杂了大量空字节,str()转换不会修改字符串本身的内容,因此无法解决问题。

内容的提问来源于stack exchange,提问作者Eugene

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 20:45:05