我已经阅读了关于堆栈溢出的类似问题,但是它们没有解决我遇到的unicode问题:'ascii'编解码器无法解码位置302中的字节0xc3。
尝试过: 导入系统 重装(SYS) sys.setdefaultencoding函数( “UTF-8”)
然而收到错误:NameError:name'reload'未定义
我尝试用丹麦元音阅读文件:æ,ø,å。作为回报,接收'UnicodeDecodeError:'ascii'编解码器无法解码字节0xc3位置302等。 位置302以及进一步包括丹麦元音。有办法解决这个问题吗?
到目前为止,我尝试将特殊格式的注释作为源代码的第一行:# -*- coding: <ascii> -*-
。没有给出任何结果。
还尝试了:f = open(fname, encoding="ascii", errors="surrogate escape")
。但是,不是用字符读取文件,例如在“Europæiske”这个词中,我得到“Europ \ udcc3 \ udca6iske”。
然后我尝试了博客中的建议(丢失了一个指向该博客的链接)以“导入unicodedata”,然而,没有很好地解释从哪里获取它的形式。
import unicodedata
import csv
with open('File.csv') as f:
reader = csv.reader(f)
for row in reader:
print(row)
答案 0 :(得分:4)
只需使用正确的编码打开即可。您必须知道保存文件的编码。西方版本的Windows可能是Windows-1252
,也可能是utf8
。诸如chardet之类的模块可以进行有根据的猜测。另外,对于csv
模块,也可以使用newline=''
打开(请参阅使用csv.reader
的文档:
import csv
with open('File.csv',encoding='utf8',newline='') as f:
reader = csv.reader(f)
for row in reader:
print(row)
答案 1 :(得分:1)
#-- coding:
事件仅适用于程序本身中使用的,例如,如果您使用丹麦语字符定义变量或函数。
你正在处理的是I / O,所以请记住规则:边缘的字节,内部的Unicode。这意味着在阅读时使用str.decode
,在写出时使用unicode.encode
。