s4d代码运行报错记录|UnicodeDecodeError: 'utf-8' codec can't decode byte 0xc4 in position 5686: invalid conti

教程二:
读取ester1.tst.mdtm,报错如下:

UnicodeDecodeError: 'utf-8' codec can't decode byte 0xc4 in position 5686: invalid continuation byte

截图如下:
s4d代码运行报错记录|UnicodeDecodeError: 'utf-8' codec can't decode byte 0xc4 in position 5686: invalid conti_第1张图片

报错解决方法:
参考链接
在读文件方法参数后面加 encoding=’gbk’,example如下:

ref = Diar.read_mdtm(os.path.join(data_dir, 'seg', 'ester1.tst.mdtm'),encoding='gbk')
uem = Diar.read_uem(os.path.join(data_dir, 'seg', 'ester1.tst.uem'),encoding='gbk')

错误原因分析:
出现这种问题绝大部分情况是因为文件不是 UTF8 编码的(例如,可能是 GBK 编码的),而系统默认采用 UTF8 解码。解决方法是改为对应的解码方式。
极少数情况是因为文件损坏了或者和一部分非 UTF8 编码混在一起,可以修复文件或采用 replace 等方式解码。
参考链接
此处错误的原因:
mdtm 在解压或者传输过程中 文件损坏:
采用二进制单行读取输出的方法,输出报错的行数如下,发现文件名前后均多了一些字节字符,把这些多余的字符删除,此处的错误即消失:
s4d代码运行报错记录|UnicodeDecodeError: 'utf-8' codec can't decode byte 0xc4 in position 5686: invalid conti_第2张图片
读取代码如下:

f = open("ester1.tst.mdtm","rb")  #二进制格式读文件
while True:
    line = f.readline()
    if not line:
        break
    else:
        try:
            #print(line.decode('utf8'))
            line.decode('utf8')
            #为了暴露出错误,最好此处不print
        except:
            print("=====")
            print(str(line))

你可能感兴趣的:(音频相关简记)