Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/336.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
写入文件时出现Python unicode错误_Python_String_File Io_Unicode_Encoding - Fatal编程技术网

写入文件时出现Python unicode错误

写入文件时出现Python unicode错误,python,string,file-io,unicode,encoding,Python,String,File Io,Unicode,Encoding,我正在使用Python 2.7解析一组网页并从中获取内容,但这些网页包含像和这样的字符,它们都以某种方式转换为“Ä”。这给了我一个包含如下内容的文件,不包括引号:我认为这很重要 使用print方法在终端中可以很好地打印字符串,但使用print>>file、string或file.writestring似乎无法获得相同的效果。显然这是一个编码问题,但我一直在寻找解决方法,但没有成功。我像这样打开文件:file=codecs.openfile.txt,w+,encoding='utf-8',我使用B

我正在使用Python 2.7解析一组网页并从中获取内容,但这些网页包含像和这样的字符,它们都以某种方式转换为“Ä”。这给了我一个包含如下内容的文件,不包括引号:我认为这很重要


使用print方法在终端中可以很好地打印字符串,但使用print>>file、string或file.writestring似乎无法获得相同的效果。显然这是一个编码问题,但我一直在寻找解决方法,但没有成功。我像这样打开文件:file=codecs.openfile.txt,w+,encoding='utf-8',我使用BeautifulSoup4的getText方法为字符串赋值。有什么办法可以解决这个问题吗?

你可以试着写出来:

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

尝试在函数的开头添加以下代码,这将解决您的问题

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

在代码开头强制执行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()

一些源代码可能会很好

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
¤
因此,您应该将解码的Unicode传递给BeautifulSoup:

>>> print bs4("\xa4".decode("iso-8859-15"), "html.parser").text # ISO-8859-15
€
这意味着您的输入数据需要正确解码。使用io.openfilename,r,encoding=utf-8或适当的编码打开输入文件

如果拉取远程网站,请检查内容类型标头或使用请求,这将在响应对象的.text属性中返回解码的Unicode

在写入文件时,使用编解码器模块是正确的。io模块是实现这一点的较新方法


当您将所有这些内容放在一起时,您将写入正确编码的数据。

您能给我们该页面的链接吗?由于缺少可复制的代码,请投反对票。这是一个令人讨厌的补丁。你会很快发现它掩盖了其他问题,因为你已经用大锤敲碎了一个坚果。这可能修复了你的输入或输出中没有定义编码的地方。这仅仅意味着你的源代码中的非ASCII码可以被正确解释。当您创建Unicode对象时,它真的有任何意义,而您不是