python-3.x - 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 文件中
解决方案
根据 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)。
推荐阅读
- java - 提交flink作业时如何处理akka AskTimeoutException
- bash - 测试文件是否具有几个可接受的文件扩展名之一的最佳方法是什么?
- algorithm - 如何知道排序算法何时完成?
- sql - 文章标签应该是多对多或带有分隔符的列
- python - Anaconda 无法识别:xgboost、catboost 和 lightgbm
- python-3.x - Python 在执行前立即关闭
- ansible - 对shell命令输出的ansible循环
- android - 如何在 android 8.1 版中获取日历电子邮件 ID?
- android - 回收站视图显示了我的视图的静态重复背景
- lua - 如何访问同一“类”的单独实例的“私有成员”?