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

How to solve UnicodeDecodeError when reading file with danish characters?

我已经阅读了关于堆栈溢出的类似问题,但是没有一个解决了我遇到的 unicode 问题:'ascii' codec can't decode byte 0xc3 in position 302.

尝试过: 导入系统 重新加载(系统) sys.setdefaultencoding("utf-8")

但是收到一个错误:NameError: name 'reload' is not defined

我尝试用丹麦语元音阅读文件:æ、ø、å。在 return 中接收 'UnicodeDecodeError: 'ascii' 编解码器无法解码字节 0xc3 位置 302 等。 位置 302 和更远的位置包括丹麦语元音。有办法解决这个问题吗?

到目前为止,我已经尝试将特殊格式的注释作为源代码的第一行:# -*- coding: <ascii> -*-。没有给出任何结果。

也尝试过:f = open(fname, encoding="ascii", errors="surrogate escape")。但是我没有读取带有字符的文件,例如 "Europæiske" 这个词,而是 "Europ\udcc3\udca6iske".

然后我尝试了从博客(丢失了一个 link 到那个博客)到 "import unicodedata" 的建议,但是,没有很好地解释从哪里获取它。

import unicodedata
import csv

with open('File.csv') as f:
  reader = csv.reader(f)
  for row in reader:
    print(row)

只需使用正确的编码打开即可。您必须知道保存文件的编码。Windows 的西方版本可能是 Windows-1252,或者可能是 utf8chardet can perform an educated guess. Also, for for csv module, open with newline='' as well (see documentation for using csv.reader:

等模块
import csv

with open('File.csv',encoding='utf8',newline='') as f:
  reader = csv.reader(f)
  for row in reader:
    print(row)

#-- coding: 东西仅用于 在程序本身 中使用的东西,例如,如果您用丹麦语字符定义变量或函数。

您要处理的是 I/O,因此请记住规则:边缘的字节,内部的 Unicode。这意味着读入时使用 str.decode,写出时使用 unicode.encode