写入文件时出现Python unicode错误

问题描述:

我使用Python 2.7解析了一大堆网页,并从网页中获取内容,但网页中包含“”和“”等字符,它们都以某种方式转换为“Äô”。这给了我一个内容如下所示的文件(不包括引号):“我认为它很重要...”写入文件时出现Python unicode错误

使用print()方法在终端中打印出的字符串很好,但我无法似乎使用print >> file, stringfile.write(string)获得相同的效果。显然这是一个编码问题,但我没有找到解决方法。我打开这样的文件:file = codecs.open("file.txt","w+", encoding='utf-8'),我使用BeautifulSoup4的getText()方法为字符串赋值。有什么方法可以解决这个问题吗?

+0

你能给我们提供该页面的链接吗? – alexanderlukanin13

+0

由于缺乏可重复的代码,因此不适用。 http://*.com/help/how-to-ask –

尝试添加以下代码行中的函数开始,这将解决您的问题。

 import sys 
     reload(sys) 
     sys.setdefaultencoding('utf8') 
+0

它的工作!非常感谢:) – tdon

+0

干杯伙计!!!!!!!! – jack

+0

这是一个令人讨厌的修复 - 所有破解。你很快就会发现它掩盖了其他问题,因为你用大锤破解了一个螺母 –

你可以尝试写出来的:

file.write(output_str.encode('utf-8', 'ignore')) 

在你的代码的开头强制utf8编码:

#!/usr/bin/python 
# -*- coding: utf-8 -*- 
myfile = open('./myfile.txt', 'w') 
myfile.write("I think it's important to be able to see all characters") 
myfile.write("\nIt woùld be Ñìçè to see foreign letters as well") 
myfile.write("\n") 
myfile.close() 
+0

这只意味着**源中的非ASCII代码**可以被正确解释。当你创建Unicode对象时,它确实有任何意义,你不是 –

一些源代码就已经不错了。

BeautifulSoup通常在猜测定字符串的编码做得很好:

from bs4 import BeautifulSoup as bs4 

>>> print bs4("\x80", "html.parser").text # Windows 1252 
€ 

>>> print bs4("\xe2\x82\xac", "html.parser").text # UTF-8 
€ 

除了当它不能:

>>> print bs4("\xa4", "html.parser").text # ISO-8859-15 
¤ 

因此,你应该通过BeautifulSoup解码的Unicode代替:

>>> print bs4("\xa4".decode("iso-8859-15"), "html.parser").text # ISO-8859-15 
€ 

这意味着你的输入数据需要被解码cor rectly。用io.open(filename, "r", encoding="utf-8")(或适当的编码)打开输入文件。

如果拉动远程网站,请检查“Content-type”标头或使用请求,它在响应对象的.text属性中返回已解码的Unicode。

写入文件时,您有使用编解码器模块的正确思想。 io模块是更新的方式。

当你把所有这些放在一起时,你会写出正确编码的数据。