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

读取cp1256编码文件时startswith方法失效,如何无需转码解决?

解决cp1256编码文件的startswith匹配问题

问题根源是你打开文件时未指定正确编码,Python默认采用系统编码读取,导致读取的字符串看似能正常打印,但内部字符编码实际不匹配,最终让startswith无法正确匹配关键字。

直接修改open函数指定编码即可解决,优化后的代码如下:

printing = False
# 显式指定源文件编码为cp1256
with open(SourceFile, "r", encoding="cp1256") as file:
    # 用with语句管理输出文件,自动处理资源释放,同时指定编码避免乱码
    with open(PointsFile, "w", encoding="cp1256") as points_file:
        for line in file:
            # 修正原代码中关键字带多余换行的问题,匹配不带换行的目标字符串
            if line.startswith("NODes"):
                printing = True
                continue
            elif line.startswith(";;CON"):
                printing = False
                break
            if printing:
                print(line, file=points_file, end="")  # 加end=""避免重复添加换行符
# 无需手动调用close(),with语句会自动关闭文件

关键细节说明:

  • 指定编码是核心:打开文件时必须加encoding="cp1256",确保Python按文件实际编码解析字符,这样得到的字符串才是准确的,startswith才能正常匹配。
  • 修正关键字格式:原代码中"NODes\n"带换行符是无效的,因为line本身已包含每行末尾的换行,匹配时只需用纯关键字即可。
  • 输出文件编码同步:写入PointsFile时也指定编码,避免写入过程中出现编码转换乱码,可选择和源文件一致的cp1256,或根据需求用UTF-8。
  • 用with语句管理文件:替代手动close(),Python会自动处理文件资源的释放,更安全可靠。

内容的提问来源于stack exchange,提问作者M.Mazzaz

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.12 07:45:48