在Python中使用编解码器编码的正确方法是什么?

时间:2014-02-15 21:29:32

标签: python encoding utf-8 decode codec

我有一个用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()

正如您所看到的,我尝试过使用'decode'和'codecs'。这些都不起作用,我的输出文本文件默认为Occidental(Windows-1252),一些实体变得乱七八糟。 我在这里做错了什么?

1 个答案:

答案 0 :(得分: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")
相关问题