学习日志:解决比亚迪宋 2017 款歌词乱码问题
初衷
最近朋友提到,他有一辆比亚迪宋 2017 款的车,用 U 盘播放歌曲时,歌词文件(LRC 格式)在中控屏幕上总是显示乱码。这让我萌生了帮他解决这个问题的想法。初步猜测,可能是歌词文件的编码与中控系统不兼容,于是决定写一个 Python 脚本,批量将歌词文件转换为适合的编码。
发现问题的过程
一开始,我尝试将歌词文件从常见的 UTF-8 编码转为 GBK,因为国内很多老设备更倾向于支持 GBK。我用 iconv
命令测试单个文件,发现转换后仍乱码,怀疑中控可能有特殊要求。随后,我用 Python 写了一个脚本,利用 chardet
检测原始编码并转换,结果遇到了 UnicodeEncodeError
,提示某些字符(如韩文 \uae40
)无法转为 GBK。接着,我调整脚本用 errors="ignore"
跳过这些字符,但又遇到 UnicodeDecodeError
,发现 chardet
检测的编码(如 GB2312)不准确。进一步测试后,我意识到需要更健壮的读取逻辑,同时支持多个文件夹批量处理。
代码调整与最终方案
通过查阅 Python 文档和编码相关资料,我不断优化脚本。以下是代码调整的关键过程:
- 解决编码错误:添加
errors="ignore"
和备用编码 GB18030。1
2
3
4
5
6
7
8try:
with open(file_path, "r", encoding=original_encoding) as f:
content = f.read()
except UnicodeDecodeError:
with open(file_path, "r", encoding="gb18030") as f:
content = f.read()
with open(file_path, "w", encoding="gbk", errors="ignore") as f:
f.write(content) - 支持多文件夹:引入
folder_paths
列表,遍历 6 个文件夹。1
2
3
4
5folder_paths = ["/Users/yuanfei/Desktop/Lyrics1", ...]
for folder_path in folder_paths:
for filename in os.listdir(folder_path):
if filename.endswith(".lrc"):
# 转换逻辑
最终,我完成了以下脚本,成功将 6 个文件夹中的所有歌词转为 GBK 编码:
1 | # -*- coding: utf-8 -*- |
成果
经过多次尝试和调整,脚本成功运行,所有歌词文件转为 GBK 编码。朋友将 U 盘插入比亚迪宋的中控后,歌词终于正常显示,没有乱码。这次经历让我深入理解了编码转换的复杂性,也提升了 Python 文件处理的实战能力。
转载请注明来源,欢迎对文章中的引用来源进行考证,欢迎指出任何有错误或不够清晰的表达。可以在下面评论区评论,也可以邮件至 756872006@qq.com