我使用以下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
但是,此方法以及我发现的其他解决方案,似乎只能用于对文件进行编码以便立即查看,而不能保存文件。我找不到一种可用于更改本地存储文件的编码的文件。
答案 0 :(得分:1)
extension String {
var xmlEscaped: String {
return replacingOccurrences(of: "&", with: "&")
.replacingOccurrences(of: "\"", with: """)
.replacingOccurrences(of: "'", with: "'")
.replacingOccurrences(of: ">", with: ">")
.replacingOccurrences(of: "<", with: "<")
}
}
函数具有一个可选的open()
参数。
它的默认值取决于平台,但对于您而言,它显然默认为UTF-8。
我知道正确的编解码器(例如,来自HTTTP标头),可以指定它:
encoding
如果您不知道它,很可能会将它写入文件中。 您可以以二进制模式打开文件:
html_doc = open('path/to/file.html', 'r', encoding='cp1252')
,然后尝试查找编码声明并解码内存中的整个内容。
但是,不要那样做。 在打开和处理HTML(如文本文件)时并没有太多用处。 您应该使用HTML解析器浏览文档树并提取所需的内容。 Python的标准库has one,但您可能会发现Beautiful Soup更易于使用。