无法将csv文件的所有元素转换为python对象

wb1gzix0  于 2022-12-10  发布在  Python
关注(0)|答案(1)|浏览(87)

我尝试使用以下python脚本将所有CSV元素转换为python对象,但CSV文件中并非所有字符都是UTF-8格式,我必须将所有这些字符转换为可读格式,即UTF-8。我如何才能实现这一点?
我试过使用简单的文本编辑器将csv文件转换为UTF-8,就像这个How to convert csv files encoding to utf-8一样,但无能为力。
我使用以下python文件:

import csv 

filename = "file.csv"

rows = [] 

with open(filename, 'r') as csvfile: 
    csvreader = csv.reader(csvfile) 

    for row in csvreader: 
        rows.append(row) 

    print("Total no. of rows: %d"%(csvreader.line_num)) 

print('\nFirst 5 rows are:\n') 
for row in rows[:5]: 
    for col in row: 
        print("%10s"%col), 
    print('\n')

Python会产生以下错误:UnicodeDecodeError: 'utf-8' codec can't decode byte 0xa4 in position 4942: invalid start byte .

cyvaqqii

cyvaqqii1#

UTF-8现在是事实上的标准,因为它可以表示任何Unicode字符,但许多系统(大多数是Windows)仍然使用其他编码,以兼容性为原因。例如,对于西欧语言,Windows使用cp 1252,这是一个Latin 1变体。
Latin 1是一个有趣的编码,因为Latin 1中的任何字节都是有效的,并且表示相同码位的unicode字符。因此,当您想要进行防弹解码并且不确定实际的编码时,它是使用的编码。如果编码不同,例如,这个utf-8编码字符串“fête”(法语中fest的意思)将'fête'读作Latin 1编码的字节串。
因此,这不会中断(但可能会给予不正确的字符):

...
with open(filename, 'r', encoding='Latin1') as csvfile: 
    csvreader = csv.reader(csvfile)
...

相关问题