更改使用urllib.request.urlretrieve()下载的本地存储的.html文件的编码

时间:2018-10-02 20:02:45

标签: python file unicode utf-8 urllib

我使用以下python代码将html文件保存到本地存储中:

url = "some_url.html
urllib.request.urlretrieve(url, 'save/to/path')

这将成功保存扩展名为.html的文件。当我尝试使用以下方法打开文件时:

html_doc = open('save/to/path/some_url.html', 'r')

我收到以下错误:

UnicodeDecodeError: 'ascii' codec can't decode byte 0xe5 in position 36255: ordinal not in range(128)

我认为这意味着我正在尝试使用ASCII编解码器读取utf-8文件。我尝试在以下位置找到解决方案:

Convert Unicode to ASCII without errors in Python

但是,此方法以及我发现的其他解决方案,似乎只能用于对文件进行编码以便立即查看,而不能保存文件。我找不到一种可用于更改本地存储文件的编码的文件。

1 个答案:

答案 0 :(得分:1)

extension String { var xmlEscaped: String { return replacingOccurrences(of: "&", with: "&amp;") .replacingOccurrences(of: "\"", with: "&quot;") .replacingOccurrences(of: "'", with: "&#39;") .replacingOccurrences(of: ">", with: "&gt;") .replacingOccurrences(of: "<", with: "&lt;") } } 函数具有一个可选的open()参数。 它的默认值取决于平台,但对于您而言,它显然默认为UTF-8。

我知道正确的编解码器(例如,来自HTTTP标头),可以指定它:

encoding

如果您不知道它,很可能会将它写入文件中。 您可以以二进制模式打开文件:

html_doc = open('path/to/file.html', 'r', encoding='cp1252')

,然后尝试查找编码声明并解码内存中的整个内容。

但是,不要那样做。 在打开和处理HTML(如文本文件)时并没有太多用处。 您应该使用HTML解析器浏览文档树并提取所需的内容。 Python的标准库has one,但您可能会发现Beautiful Soup更易于使用。