我有一个程序从文件中读取带有特殊字符(用西班牙语)的字符串。然后我使用chdir更改为其名称为字符串的目录。
例如,在名为“names.txt”的文件中,我得到了以下内容
Tableta
Música
.
.
etc
该文件以utf-8编码,以便我从python中读取它,如下所示
f=open("names.txt","r",encoding="utf-8")
names=f.readlines()
f.close()
它确实成功读取了
print(names)
输出:
['Tableta\n','Música\n', ...etc]
当我想要更改到第一个目录(第一个名称'Tableta',没有换行符)时出现问题
chdir(names[0][:-1])
我收到以下错误
FileNotFoundError:[WinError 2]系统找不到指定的文件:“\ ufeffTableta”
它只会发生在名字上,这对我来说非常奇怪。使用其他名称,它可以更改目录,无论它们是否具有特殊字符
我认为它必须对编码做一些事情,因为'\ ufeff'额外添加了字符。所以我将“names.txt”文件更改为ANSI编码并删除了所有特殊字符,以便我可以用python读取它,并且它有效。但事实是我需要在utf-8编码中使用该文件,以便我可以读取特殊字符。有什么办法可以解决这个问题吗?为什么python将'\ ufeff'字符添加到字符串中并且仅使用名字?
答案 0 :(得分:1)
您的文件" names.txt"有一个字节顺序掩码(BOM)。要删除它,请使用以下解码器打开文件:
f = open("names.txt", encoding="utf-8-sig")
作为旁注,删除文件名更安全:names[0].strip()
而不是names[0][:-1]
。
答案 1 :(得分:0)
文件的开头有unicode BOM。在阅读文件时跳过第一个字符或使用utf-8-sig
编码打开它。