使用 python 导出 csv 文件时如何将 cp1252 转换为 UTF-8

How to convert cp1252 to UTF-8 when export csv file using python

当我尝试导出 CSV 文件时出现 Unicode 错误(网络抓取,我正在使用 Beautifulsoup 并导入了 CSV 和 Beautifulsoup)。该代码由 Mac Linux 使用,它非常支持 UTF-8,但我使用的是 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

但这没有work.Please帮助。

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

在随附的代码文档(评论link)中,片段编号。 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.