读取带有丹麦字符的文件时如何解决UnicodeDecodeError?

时间:2016-03-15 15:56:16

标签: python python-3.x unicode unicode-normalization

我已经阅读了关于堆栈溢出的类似问题,但是它们没有解决我遇到的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)

2 个答案:

答案 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