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

问题描述 投票:0回答:1

我尝试导出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

但它不起作用。请帮助。

python utf-8 web-scraping beautifulsoup cp1252
1个回答
1
投票

将数据写入CSV输出文件时,会出现UnicodeEncodeError。正如错误消息告诉我们的那样,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。

© www.soinside.com 2019 - 2024. All rights reserved.