我正在尝试使用Python读取CSV文本文件( UTF-8,不含BOM,根据Notepad ++ )。但是编码似乎存在问题:
print(open(path, encoding="utf-8").read())
Codec无法解码字节 08xf
这个小角色似乎是问题所在:●
(完整字符串:“●••อีเปียขี้บ่น●●”),但我相信会有更多。
如果我尝试使用UTF-16,则会显示一条消息:
#also tried with encode print(open(path, encoding="utf-16").read().encode('utf-8'))
非法的UTF-16代理人
即使我尝试使用自动编解码器查找器打开它,我也会收到错误消息。
def csv_unireader(f, encoding="utf-8"): for row in csv.reader(codecs.iterencode(codecs.iterdecode(f, encoding), "utf-8")): yield [e.decode("utf-8") for e in row]
我在俯瞰什么?该文件包含Twitter文本,其中包含许多不同的字符,这是肯定的。但是这在Python中不是一项如此困难的任务,只是阅读/打印文件?
修改
尝试使用此答案中的代码:https://stackoverflow.com/a/14786752/45311
import csv with open('source.csv', newline='', encoding='utf-8') as f: reader = csv.reader(f) for row in reader: print(row)
这至少会在屏幕上打印一些行,但在某些行之后也会抛出错误:
cp850.py ,第19行,编码 return codecs.charmap_encode(input,self.errors,encoding_map)[0] UnicodeEncodeError:'charmap'编解码器无法编码62-63位的字符: 字符映射到
似乎自动使用CP850
这是另一种编码......我无法理解这一切......
答案 0 :(得分:1)
你的python的版本是什么? 如果使用2.x尝试将导入粘贴到脚本的开头:
from __future__ import unicode_literals
而不是尝试:
print(open(path).read().encode('utf-8'))
还有一个很棒的charset检测工具:chardet。 我希望它会帮助你。
答案 1 :(得分:1)
您可以在open函数中使用 errors 参数。您可以尝试下面的选项之一(我从python文档中提取了描述):
所以,你可以使用:
print(open(path, encoding="utf-8", errors="ignore").read())