You need to enable JavaScript to run this app. 运行Common Voice处理Python脚本出现UnicodeDecodeError问题求助
优惠活动
大模型
产品
解决方案
定价
更多

运行Common Voice处理Python脚本出现UnicodeDecodeError问题求助

错误根因定位

该UnicodeDecodeError和pydub音频转换逻辑无关,报错发生在脚本读取TSV文本元数据的阶段,核心触发原因如下:

  • Python在Windows环境下以文本模式打开文件时,未显式指定编码会默认调用系统本地charmap编码做解码,这类编码无法覆盖Common Voice数据集内包含的多语言特殊字符。
  • Common Voice数据集的所有TSV元数据文件统一采用UTF-8编码存储,当脚本用本地默认编码读取时,遇到无映射的字节(本次报错中的0x81)就会直接抛出解码异常。
  • 脚本本身存在多处编码相关疏漏:两次打开TSV元数据文件时未指定UTF-8编码,后续写入JSON文件时同样未指定编码,且json.dumps默认开启ASCII转义,会导致多语言文本被转为不可读的转义序列。
针对性修复步骤
  • 修正所有TSV文件的读取逻辑,在open()调用中显式增加encoding='utf-8'参数:
    1. 统计TSV总行数的读取代码,同时修正原代码里的变量拼写错误(原代码将line写为ine):
    with open(file_path, encoding='utf-8') as f:
        lenght = sum(1 for line in f)
    
    1. 读取CSV内容的读取代码:
    with open(file_path, newline='', encoding='utf-8') as csvfile:
    
  • 修正所有JSON文件的写入逻辑,避免Windows环境下再次触发编码错误:
    1. 所有写入JSON的open()调用增加encoding='utf-8'参数
    2. 调用json.dumps时增加ensure_ascii=False参数,保证多语言文本可以正常写入,不被转义为不可读的ASCII编码序列
  • 修复脚本传参的隐性bug:parse_known_args()返回值为「解析得到的参数命名空间、未识别的参数列表」组成的二元组,原代码直接将整个元组传给main()函数时,访问args.convert属性会直接报错,需要修改为:
    args, _ = parser.parse_known_args()
    
  • 清理冗余代码:原代码中提前单独open(train.json)/open(test.json)的操作属于无意义冗余,且会造成文件句柄泄漏,可直接删除,仅保留with上下文管理器的写入逻辑即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.11.01 20:45:03