读取带有丹麦字符的文件时如何解决 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
,或者可能是 utf8
。 chardet 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
。
我已经阅读了关于堆栈溢出的类似问题,但是没有一个解决了我遇到的 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
,或者可能是 utf8
。 chardet 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
。