2014-02-15 124 views
0

我有一个用utf-8编码的HTML文件。我想把它输出到一个用utf-8编码的文本文件中。这里是我正在使用的代码:什么是在Python中使用编解码器编码的正确方法?

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),一些实体变成乱码。 我在这里做错了什么?

+0

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

回答

1

使用codecs模块打开UTF-8文件时,文件的内容会自动解码为Unicode字符串,因此您不得再尝试解码它们。

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

,清楚的是你处理Unicode字符串,它可能是一个更好的主意在

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

使用Unicode文本,因为虽然它并没有真正在这种情况下,重要(这可能因为你实际上并没有使用正则表达式),所以也写成

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") 
+0

虽然,我的问题不在于重新模块。 该文本包含'(或U + 2019在Unicode中)的字符,并且一旦我用其他应用程序打开文本文件,这些字符就变成''''。 所以这意味着编解码器模块实际上并不用utf-8编码我的文件。我只是不明白为什么。 – kormak

+2

'*'* *是U + 2019的UTF-8!如果您看到这些字符,则意味着您使用的任何编辑器都认为它正在读取Windows-1252文件。编辑是错误的,而不是文件。 –

+0

哦。那么解释很多!我应该使用该文本文件与文本分析程序(而​​不是文本编辑器),所以这个问题可能来自_that_程序。那么我想我会替换或删除这些实体。谢谢你的帮助! – kormak

相关问题