实用科技屋
霓虹主题四 · 更硬核的阅读氛围

Python脚本编码问题解决:别再被乱码搞崩溃了

发布时间:2025-12-24 13:41:17 阅读:438 次

在家用电脑写个Python小工具,处理一下家里的电费账单或者整理照片文件名,结果一运行,弹出一堆乱码,直接卡住。这种情况我碰过太多次了,其实大多数时候不是代码写错了,而是编码没整明白。

最常见的报错长这样

你可能见过:UnicodeDecodeError: 'utf-8' codec can't decode byte 0xb0 in position 1: invalid start byte。看着吓人,说白了就是Python读文件时,默认用UTF-8解码,但文件其实是别的编码格式,比如GBK,自然就翻车了。

中文系统下特别容易中招

Windows系统默认编码是GBK,你要是用记事本保存了个带中文的文本,然后Python脚本去读它,不指定编码就会出问题。哪怕你代码里写了中文注释,有时候也会莫名其妙报错。

解决办法很简单,打开文件的时候明确告诉Python用什么编码:

f = open('data.txt', encoding='gbk')
content = f.read()
f.close()

或者更保险一点,用UTF-8保存文件,写入时也指定:

f = open('output.txt', 'w', encoding='utf-8')
f.write('本月水电费合计:328元\n')
f.close()

自动识别编码也行

如果你不知道文件是什么编码,可以用chardet库试试:

import chardet

with open('unknown.txt', 'rb') as f:
    raw_data = f.read()
    result = chardet.detect(raw_data)
    print(result)  # 输出可能像 {'encoding': 'GB2312', 'confidence': 0.99}

# 然后根据检测结果重新读取
encoding = result['encoding']
data = raw_data.decode(encoding)

脚本开头也别忘了

虽然Python 3默认源码文件是UTF-8,但如果你在老系统上跑,或者给别人分享脚本,最好在第一行或第二行加上编码声明:

# -*- coding: utf-8 -*-

这样就算脚本里有中文字符串,也不会报语法错误。

实际例子:整理家庭支出记录

我之前写了个小脚本,把家人手写的支出记在文本里,每天读一次,统计月度开销。一开始总报错,后来发现是手机发过来的文本用的是UTF-8-BOM格式,前面多了几个隐藏字节。改用encoding='utf-8-sig'就正常了。

with open('spending.log', encoding='utf-8-sig') as f:
    for line in f:
        print(line.strip())

就这么一点改动,脚本立马跑通,再也不用手动清理乱码了。

编码问题看着玄乎,其实就那么几种情况。记住:读文件要指定encoding,写文件也要定好格式,遇到奇怪字符先查编码,别让小问题耽误正事。