使用 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.
当我尝试导出 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.