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

使用python导出csv文件时如何将cp1252转换为UTF-8,python,utf-8,web-scraping,beautifulsoup,cp1252,Python,Utf 8,Web Scraping,Beautifulsoup,Cp1252,我在尝试导出CSV文件时出现Unicode错误(web抓取,我使用的是Beautifulsoup,并同时导入了CSV和Beautifulsoup)。这段代码由maclinux使用,它非常支持UTF-8,但我使用的是Windows。错误显示为 > UnicodeEncodeError Traceback (most recent call last) in () 71 > 'ranking_title': ranking_title, ---> 72 'ranking_categ

我在尝试导出CSV文件时出现Unicode错误(web抓取,我使用的是Beautifulsoup,并同时导入了CSV和Beautifulsoup)。这段代码由maclinux使用,它非常支持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

但是它不起作用。请帮助。

当您将数据写入CSV输出文件时,将出现您面临的
UnicodeIncodeer错误。
正如错误消息所告诉我们的,Python使用的“charmap”编解码器不支持数据中包含的字符。
这通常发生在您在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。

看起来问题不在于如何读取(解码)数据,而在于如何写入数据(编码,参见错误消息)。
get_page
功能看起来不错,但您应该显示打开文件以将CSV输出写入的代码部分。您能提供您正在使用的网站的url吗?@lenz非常感谢。我很快就会提供的。现在我遇到了另一个随机错误。Ditch
urllib.request
。使用
请求
模块。它为你做所有的解码,你可以专注于你真正想做的事情。(当然,你可以用
urllib
重新实现
请求所做的一切。但是对于初学者来说,你需要注意
内容类型
响应头,而不是硬编码一个编码。但这真的是你的目标吗,还是你真的想下载并处理数据?)@总的来说,Tomalak关于
请求
让你的生活更轻松的观点肯定是正确的。不过,恐怕它无法解决这个特殊问题,因为解码显然成功了(没有
UnicodeDecodeError
)。我怀疑您在未声明
encoding=
参数的情况下
打开了输出文件,因此Python默认使用特定于平台的默认编解码器“CP-1252”,它显然不支持数据中的所有字符。它可以工作ssss!!!!非常感谢你。我非常感谢你的时间和努力。我真是太感谢你了不用担心。我很高兴这有帮助。