2016-03-15 27 views
0

我已经通过在堆栈溢出类似的问题阅读,但他们不解决unicode的问题,我有:在位置302如何在阅读带有丹麦字符的文件时解决UnicodeDecodeError问题?

“ASCII”编解码器不能解码字节0xc3曾尝试: 进口SYS 重装( SYS) sys.setdefaultencoding函数( “UTF-8”),然而

收到一个错误:NameError:名字 '刷新' 没有定义

我尝试读取文件与丹麦元音:æ,O,A。作为回报,接收'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) 
+1

[UnicodeDecodeError:'ascii'编解码器无法解码位置23中的字节0xc3:序号不在范围(128)]中的可能重复(http://stackoverflow.com/questions/24475393/unicodedecodeerror-ascii-codec-cant- decode-byte-0xc3-in-position-23-ordinal) – kchomski

+0

kchomski,不是试图连接,而是用丹麦字符读取文件,这是另一种情况! –

回答

3

只需用正确的编码打开即可。您必须知道文件保存的编码。西方版本的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

#-- coding:的是仅适用于什么在程序本身使用,例如,如果你定义一个变量或丹麦字符功能

你要对付的是I/O,所以要记住以下规则:。在边缘字节,Unicode的这里面读书的时候,和unicode.encode写出来时,是指使用str.decode

+0

谢谢@jcomeau_ictx我现在更好地理解这个问题! –