首页 > 解决方案 > UnicodeDecodeError:“utf-8”编解码器无法解码位置 3799 中的字节 0x90:无效的起始字节

问题描述

import csv
count=0
trainpath='C:/Users/503183568/Downloads/sample1.csv'
trainpath2='C:/Users/503183568/Downloads/sample2.csv'
with open(trainpath, 'r',encoding="utf-8") as infile:
    with open(trainpath2,'w',newline='') as outfile:
        trainReader = csv.reader(infile)
        trainWriter= csv.writer(outfile)
        for row in trainReader:
            trainWriter.writerow(row)

我正在尝试将 sample1 的内容复制到 sample2 但得到标题中提到的错误也尝试使用 utf-8 和 utf-1252 编码但无法读取 sample1 的内容无法读取的数据是“文件名:D ©;" 在 .csv 文件中

标签: python-3.x

解决方案


根据 UTF-8 的规范,符号不能以二进制 10 开头。相反,它可以以二进制 0 开头,否则以 bin 110、1110、11110 开头,其余字节将从第一位 1 开始。但 bin 10* 是正是 0x90 的情况,即二进制 10010000。
https://en.wikipedia.org/wiki/UTF-8
这就是为什么您的文本不是 UTF-8 的原因。尝试另一种编码。

符号 © 是十六进制 A9,但不是 0x90(使用十六进制编辑器检查文本中的确切符号)。0xA9 二进制 10101001(在 ISO 拉丁文 1 中)。从ASCII扩展,二进制1000000以上的值。第一位设置为1的所有字符都被扩展,解释取决于编码表。© 的预期 UTF-8 值为 \xC2\xA9(或二进制 11000010 10101001)。


推荐阅读