【问题标题】:Python reading unicode from local filesPython从本地文件中读取unicode
【发布时间】:2026-01-02 01:25:02
【问题描述】:

我正在尝试读取我在本地拥有的一些 unicode 文件。使用列表时如何读取 unicode 文件?我已经阅读了 python 文档和大量 * 问答,它们回答了我的许多其他问题,但我找不到这个问题的答案。

感谢任何帮助。

编辑:抱歉,我的文件是 utf-8 格式。

【问题讨论】:

  • 你当前的代码是什么?
  • 没有“Unicode 文件”之类的东西。有几种编码可用于将Unicode 字符串编码为字节,其中最常见的是utf-8。那是你文件的编码吗?如果不是,那是哪一个?你的文件有BOM (Byte Order Mark)吗?
  • 是的,我的文件是 UTF-8 格式的。

标签: python python-2.7 unicode


【解决方案1】:

您可以使用打开 UTF-8 编码的文件

import codecs
with codecs.open("myutf8file.txt", encoding="utf-8-sig") as infile:
    for line in infile:
        # do something with line

请注意,codecs.open() 不会将 \r\n 转换为 \n,因此如果您使用的是 Windows 文件,则需要考虑到这一点。

utf-8-sig 编解码器将读取带有或不带有 BOM (Byte Order Mark) 的 UTF-8 文件(如果存在则将其剥离)。在编写时,您应该使用utf-8 作为编解码器,因为the Unicode standard recommends against writing a BOM in UTF-8 files

【讨论】:

  • if infile.read(len(codecs.BOM_UTF8)) != codecs.BOM_UTF8: infile.seek(0) 后面跟if infile.read(len(codecs.BOM_UTF8)) != codecs.BOM_UTF8: infile.seek(0) 语句的输入文件开头可能会忽略任何UTF-8 BOM 是相当容易的。
  • @martineau:为此使用utf-8-sig 编解码器可能更容易(但你不应该用它来写作,因此我没有将它包含在我的答案中)。
  • 那比我想象的还要容易。考虑到 OP 的问题中甚至没有提到它,您似乎过于担心编写文件。
  • @martineau:我想你是对的。好吧,在某一时刻,程序会输出something,我猜这与程序读取的文件有关。我已经修改了我的答案。
  • 感谢您的帮助,Tim Pietzcker 和 @martineau。