0

当我尝试导出 CSV 文件时出现 Unicode 错误(网络抓取,我使用的是 Beautifulsoup 并同时导入了 CSV 和 Beautifulsoup)。该代码由完全支持 UTF-8 的 Mac Linux 使用,但我使用的是 Windows。错误显示为

> UnicodeEncodeError Traceback (most recent call last) in () 71
> 'ranking_title': ranking_title, ---> 72 'ranking_category':
> ranking_category}) 73
> 
> ~\Anaconda3\lib\csv.py in writerow(self, rowdict) 154 def
> writerow(self, rowdict): --> 155 return
> self.writer.writerow(self._dict_to_list(rowdict)) 156
> 
> ~\Anaconda3\lib\encodings\cp1252.py in encode(self, input, final) 18
> def encode(self, input, final=False): ---> 19 return
> codecs.charmap_encode(input,self.errors,encoding_table)[0] 20
> 
> UnicodeEncodeError: 'charmap' codec can't encode characters in
> position 299-309: character maps to

适用于 Mac 的原始代码是:

def get_page(url):
    request = urllib.request.Request(url)
    response = urllib.request.urlopen(request)
    mainpage = response.read().decode('utf8')
    return mainpage

我尝试在工作表的开头解码 cp1252 并编码 UTF-8:

def get_page(url):
    request = urllib.request.Request(url)
    response = urllib.request.urlopen(request)
    mainpage = response.read().decode('cp1252').encode('utf8')
    return mainpage

但它不起作用。请帮助。

4

1 回答 1

1

UnicodeEncodeError您将数据写入 CSV 输出文件时,就会出现您面临的情况。正如错误消息告诉我们的那样,Python 使用不支持数据中包含的字符的“charmap”编解码器。当您open在 Windows 机器上未指定编码参数的文件时,通常会发生这种情况。

在附加的代码文档(评论链接)中,代码片段没有。10,我们可以看到是这样的。你写了:

with open('wongnai.csv', 'w', newline='') as record:
    fieldnames = ...

在这种情况下,Python 使用依赖于平台的默认编码,在 Windows 机器上通常是某种 8 位编码。指定支持所有 Unicode 的编解码器,并且写入文件应该成功:

with open('wongnai.csv', 'w', newline='', encoding='utf16') as record:
    fieldnames = ...

当然,您也可以使用“utf8”或“utf32”代替“utf16”。UTF-8 在 Unix 环境和 Internet 上保存文件非常流行,但如果您打算稍后用 Excel 打开 CSV 文件,您可能会遇到一些麻烦,让应用程序正确显示数据。一个更适合 Windows(但技术上非标准)的解决方案是使用“utf-8-sig”,它在文件的开头添加一些半魔术字符,以帮助 Windows 程序理解它是 UTF-8。

于 2018-09-11T06:53:28.487 回答