【问题标题】:What is the proper way to use codecs' encoding in Python?在 Python 中使用编解码器编码的正确方法是什么?
【发布时间】:2014-02-15 21:29:32
【问题描述】:

我有一个用 utf-8 编码的 HTML 文件。我想将它输出到一个以 utf-8 编码的文本文件。这是我正在使用的代码:

import codecs
IN = codecs.open("E2P3.html","r",encoding="utf-8")
codehtml = IN.read()

#codehtml = codehtml.decode("utf-8") 

texte = re.sub("<br>","\n",codehtml)

#texte = texte.encode("utf-8") 

OUT = codecs.open("E2P3.txt","w",encoding="utf-8")
OUT.write(texte)

IN.close()
OUT.close()

如您所见,我已尝试同时使用“解码”和“编解码器”。这些都不起作用,我的输出文本文件默认为 Occidental (Windows-1252) 并且一些实体变得乱码。 我在这里做错了什么?

【问题讨论】:

  • 为什么你认为输出文件被编码为Windows-1252?您是否使用了无法检测没有 BOM 的 UTF-8 文件的编辑器?

标签: python encoding utf-8 decode codec


【解决方案1】:

当打开带有codecs 模块的 UTF-8 文件时,文件的内容会自动解码为 Unicode 字符串,因此您不能再次尝试解码。

写文件时也是如此;如果您使用 codecs 模块编写它,您传递的 Unicode 字符串将自动编码为您指定的任何编码。

为了明确表明您正在处理 Unicode 字符串,最好使用 Unicode 文字,如

texte = re.sub(u"<br>", u"\n",codehtml)

虽然在这种情况下并不重要(也可以写成

texte = codehtml.replace(u"<br>", u"\n")

因为你实际上并没有使用正则表达式)。

如果应用程序无法识别 UTF-8 文件,它可能有助于使用 BOM (Byte Order Mark) 保存它(通常不鼓励这样做,但如果应用程序无法识别 UTF-8 文件,则值得试试):

OUT = codecs.open("E2P3.txt","w",encoding="utf-8-sig")

【讨论】:

  • 我遇到的问题不在于 re 模块。文本包含诸如 ' (或 Unicode 中的 U+2019)之类的字符,一旦我用其他应用程序打开文本文件,这些字符就会变成 '''。所以这意味着编解码器模块实际上并没有用 utf-8 对我的文件进行编码。我只是不明白为什么。
  • ’ U+2019的UTF-8!如果您看到这些字符,则意味着您使用的任何编辑器都认为它正在读取 Windows-1252 文件。编辑器错了,不是文件。
  • 哦。那么这就解释了很多!我应该将该文本文件与文本分析程序(而​​不是文本编辑器)一起使用,因此问题可能来自 that 程序。我想我会替换或删除这些实体,然后。感谢您的帮助!
猜你喜欢
  • 1970-01-01
  • 2010-11-22
  • 2013-03-27
  • 1970-01-01
  • 2010-10-15
  • 2022-01-22
  • 1970-01-01
相关资源
最近更新 更多