如何在Python中以UTF-8编码将数据写入磁盘?
下面的Python代码如何在Python中以UTF-8编码将数据写入磁盘?,python,unicode,utf-8,Python,Unicode,Utf 8,下面的Python代码 html_data = urllib2.urlopen(some_url).read() f = codecs.open(filename, 'w', encoding='utf-8') f.write(html_data) f.close() 。。。有时会出现UnicodeDecodeError故障 File "/.../lib/python2.6/codecs.py", line 686, in write return self.writer.write(da
html_data = urllib2.urlopen(some_url).read()
f = codecs.open(filename, 'w', encoding='utf-8')
f.write(html_data)
f.close()
。。。有时会出现UnicodeDecodeError故障
File "/.../lib/python2.6/codecs.py", line 686, in write
return self.writer.write(data)
File "/.../lib/python2.6/codecs.py", line 351, in write
data, consumed = self.encode(object, self.errors)
UnicodeDecodeError: 'ascii' codec can't decode byte 0xd0 in position 5605: ordinal not in range(128)
我的问题是:
- 如何确保我的
调用始终返回UTF-8urllib2.urlopen(some_url).read()
- 我的
调用会阻止它以UTF-8编码将数据存储到磁盘编解码器是否有任何问题。打开(…)
data = urlopen(uri).read().decode(encoding)
f = open(file_name, 'wb')
f.write(data.encode('utf-8'))
f.close()
data = urlopen(uri).read().decode(encoding)
f = open(file_name, 'wb')
f.write(data.encode('utf-8'))
f.close()
问题不在于
编解码器。打开——问题在于传递到。写入一个字节字符串(给定\xd0
代码),该字节字符串在某些ISO-8859-*
或相关编解码器中明确编码
返回一个响应对象,该对象除了类似文件的行为外,还作为额外方法:
info()
-返回元信息
中的页面,例如页眉
httplib.HTTPMessage的形式
实例(见)
尤其是内容类型
标题,对于类似文本的内容,应具有字符集
参数,指定其使用的编码,例如内容类型:text/html;字符集=ISO-8859-4
。您需要解析和隔离字符集
,并使用它将内容解码为Unicode(因此您的编解码器。open
ed file like对象始终获取要写入的Unicode参数,并在utf-8
中正确写入)
如果字符集
丢失,或者使用它来解码文本会导致错误(表明字符集
是错误的),作为拯救的最后希望,您可以尝试使用启发式的方法(毕竟,web上的许多页面都有可怕的元数据错误,以及破坏的HTML等等).问题不在于编解码器。打开——问题在于传递到。编写一个字节字符串(给定其中的\xd0
代码),该字符串在某些ISO-8859-*
或相关编解码器中明确编码
返回一个响应对象,该对象除了类似文件的行为外,还作为额外方法:
info()
-返回元信息
中的页面,例如页眉
httplib.HTTPMessage的形式
实例(见)
尤其是内容类型
标题,对于类似文本的内容,应具有字符集
参数,指定其使用的编码,例如内容类型:text/html;字符集=ISO-8859-4
。您需要解析和隔离字符集
,并使用它将内容解码为Unicode(因此您的编解码器。open
ed file like对象始终获取要写入的Unicode参数,并在utf-8
中正确写入)
如果字符集
丢失,或者使用它来解码文本会导致错误(表明字符集
是错误的),作为拯救的最后希望,您可以尝试使用启发式的方法(毕竟,web上的许多页面都有可怕的元数据错误,以及破坏的HTML等等)。,HTML的默认字符集是“iso-8859-1”,因此如果没有声明任何字符集,则应为iso-8859-1。当然,HTML是一个杂乱无章的世界,所以不能保证没有字符集的文档实际上是iso-8859-1。@Ned,说得好,但我还是会尝试UED以防万一(当然它不能区分不同的iso-8859-etc类或类似CP1252的同源词,但至少它是一个安全的“B计划”;-),HTML的默认字符集是“iso-8859-1”,因此如果没有声明任何字符集,则应为iso-8859-1。当然,HTML是一个杂乱无章的世界,所以不能保证一个没有字符集的文档实际上是iso-8859-1。@Ned,说得好,但我还是会尝试UED以防万一(当然它不能区分各种iso-8859-etc类或类似CP1252的同源词,但至少它是一个安全的“B计划”;-)。