Python3中处理GBK编码文件的问题

各位大佬好,请教一个问题,我有一个源文件是 gbk 编码的,现在要修改其中的内容。内容是有规范的,比如第一位到第三位是序号。但是这个站位是按照字节来算,比如中文字符算 2 位,英文字符算 1 位,我把文件内容当成字符串读到文件之后,这个字符站位默认都是一位,所以我无法按照规范定位到应该修改的位置。

想了半天查了很多资料,好像相关问题的资料很少,求各位大佬帮帮忙。


Python3中处理GBK编码文件的问题
5 回复

读取文件的时候指定编码,试试
fp = open(‘xxx.txt’, encoding=‘gb18030’)


在Python3里处理GBK文件,核心就两点:用正确的编码打开,以及处理好字符串和字节的转换。

1. 读取GBK文件 直接用open()函数指定encoding='gbk'就行,Python会帮你把字节解码成字符串。

# 正确读取GBK文件
with open('gbk_file.txt', 'r', encoding='gbk') as f:
    content = f.read()  # content现在是Unicode字符串
    print(content)

2. 写入GBK文件 写入时同样指定编码,Python会自动把字符串编码成GBK字节。

# 写入GBK文件
text = "你好,世界!"
with open('output_gbk.txt', 'w', encoding='gbk') as f:
    f.write(text)

3. 处理编码错误 遇到非法字符时,有三种处理方式:

# 忽略错误字符
with open('file.txt', 'r', encoding='gbk', errors='ignore') as f:
    content = f.read()

# 替换为问号
with open('file.txt', 'r', encoding='gbk', errors='replace') as f:
    content = f.read()

# 严格模式(默认),遇到错误直接报错
with open('file.txt', 'r', encoding='gbk', errors='strict') as f:
    content = f.read()

4. 二进制模式处理 如果需要先处理字节再解码:

with open('gbk_file.txt', 'rb') as f:
    byte_data = f.read()  # 读取原始字节
    text = byte_data.decode('gbk')  # 手动解码

5. 常见坑点

  • 不要用默认编码打开GBK文件,会乱码
  • 网络传输或数据库读取时,确认数据确实是GBK编码
  • 混合编码的文件最麻烦,可能需要逐行尝试不同编码

记住这个原则:读文件时字节→字符串(解码),写文件时字符串→字节(编码)。

总结:明确指定encoding='gbk'参数是处理这类文件的关键。

你需要计算的时候把 string encode 成 gbk bytes 再算长度就行了。

感谢大佬,已经成功

用 powershell 没有这样的问题,或者说可以避过。

中英文长度都是 1 字符,不按字节统计。

回到顶部