6.5我试图从CSV文件中提取一些信息,但是文件是用俄语写的,所以我需要使用'cp866'来解码它。但是,我无法得到正确的输出。
这是我使用的代码:
def printcsv():
with open('vocabulary.csv',newline='') as f:
reader = csv.reader(f)
for row in reader:
#store in array
print(row.decode('cp866'))
这是我得到的错误:
"/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/encodings/ascii.py", line 26, in decode
return codecs.ascii_decode(input, self.errors)[0]
UnicodeDecodeError: 'ascii' codec can't decode byte 0xa7 in position 0: ordinal not in range(128)
答案 0 :(得分:0)
Oups,这不是读取编码的csv文件的正确方法。以下是您尝试做的事情:
with open('vocabulary.csv',newline='') as f: # open the file with default system encoding
reader = csv.reader(f) # declare a reader on it
for row in reader: # here comes the problem
我假设您的系统使用ASCII作为默认编码。因此,当读者尝试加载一行时,从文件中读取一行(字节)并使用默认的ascii编码解码为字符串。
无论如何,row
是一个列表,而不是一个字符串,所以如果你到达那一行,row.decode
会引发错误。
如果在打开文件时指定文件编码的正确方法:
def printcsv():
with open('vocabulary.csv',newline='', encoding='cp866') as f:
reader = csv.reader(f)
for row in reader:
#store in array
但我不确定
print(row)
根据sys.stdout
使用的编码,您可能需要对数组中的每个字符串进行全面编码:
print([ field.encode(encoding) for field in row ])