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

时间:2019-01-31 08:18:13

标签: python csv utf-8

我正在尝试使用以下python脚本将所有CSV元素转换为python对象,但并非CSV文件中的所有字符都采用UTF-8,因此我必须将所有这些字符都转换为可读格式,即UTF-8。我该如何实现?

我曾尝试使用像How to convert csv files encoding to utf-8这样的简单文本编辑器将csv文件转换为UTF-8,但是却无济于事。

我正在使用以下python文件:

__init__.py

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') 

1 个答案:

答案 0 :(得分:0)

UTF-8现在是事实上的标准,因为它可以表示任何Unicode字符,但是出于兼容性原因,许多系统(大多数是Windows)仍使用其他编码。例如,对于西欧语言,Windows使用cp1252(这是Latin1变体)。

Latin1是一种有趣的编码,因为任何字节在Latin1中都是有效的,并且表示相同代码点的unicode字符。因此,当您要进行防弹解码并不确定实际编码时,它是 编码。只是如果编码不同,您将读取奇怪字符。例如,此utf-8编码的字符串“fête”(法语为fest)将读为'fête'作为Latin1编码的字节字符串。

因此这不会中断(但可能会提供不正确的字符):

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