Python从文件中读取并保存为utf-8

新手上路,请多包涵

我在读取文件、处理其字符串并保存到 UTF-8 文件时遇到问题。

这是代码:

 try:
    filehandle = open(filename,"r")
except:
    print("Could not open file " + filename)
    quit()

text = filehandle.read()
filehandle.close()

然后我对可变文本进行一些处理。

接着

try:
    writer = open(output,"w")
except:
    print("Could not open file " + output)
    quit()

#data = text.decode("iso 8859-15")
#writer.write(data.encode("UTF-8"))
writer.write(text)
writer.close()

这完美地输出了文件,但根据我的编辑器,它是在 iso 8859-15 中输出的。由于同一编辑器将输入文件(在变量文件名中)识别为 UTF-8,我不知道为什么会这样。据我的研究表明,注释行应该可以解决问题。但是,当我使用这些行时,生成的文件主要是特殊字符的乱码,带有波浪号的单词,因为文本是西班牙语。我真的很感激任何帮助,因为我很困惑….

原文由 aarelovich 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 554
2 个回答

使用 openencoding 参数在程序的 I/O 边界处理进出 Unicode 的文本。确保使用正在读取的文件的(希望有记录的)编码。默认编码因操作系统而异(具体而言, locale.getpreferredencoding(False) 是使用的编码),因此我建议始终明确使用 encoding 参数以实现可移植性和清晰性(下面的 Python 3 语法):

 with open(filename, 'r', encoding='utf8') as f:
    text = f.read()

# process Unicode text

with open(filename, 'w', encoding='utf8') as f:
    f.write(text)

如果仍在使用 Python 2 或为了 Python 23 兼容性, io 模块实现 open 与 Python 3 的 open 具有相同的语义,并且存在于两个版本中:

 import io
with io.open(filename, 'r', encoding='utf8') as f:
    text = f.read()

# process Unicode text

with io.open(filename, 'w', encoding='utf8') as f:
    f.write(text)

原文由 Mark Tolonen 发布,翻译遵循 CC BY-SA 4.0 许可协议

你也可以通过下面的代码来通过它:

 file=open(completefilepath,'r',encoding='utf8',errors="ignore")
file.read()

原文由 Siva Kumar 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题