Python下载指定CSV文件出现乱码,求正确编码解决方案
解决Global Policy Uncertainty CSV下载乱码问题
方案1:Pandas 直接读取(最简方式)
指定windows-1252编码即可正常读取,这是该文件实际使用的编码:
import pandas as pd url = "https://www.policyuncertainty.com/media/Global_Policy_Uncertainty_Data.csv" # 读取数据 df = pd.read_csv(url, encoding="windows-1252") # 验证前几行数据 print(df.head()) # 保存为UTF-8编码的本地文件(避免后续乱码) df.to_csv("Global_Policy_Uncertainty_Data.csv", encoding="utf-8", index=False)
方案2:Requests + CSV 手动处理
如果需要手动控制下载流程,注意两点:
- 让Requests自动处理服务器返回的gzip压缩内容
- 用
windows-1252解码原始字节,保存时转成UTF-8
import requests import csv url = "https://www.policyuncertainty.com/media/Global_Policy_Uncertainty_Data.csv" # 开启流模式并自动解压缩 response = requests.get(url, stream=True) response.raw.decode_content = True # 以UTF-8编码写入本地文件 with open("Global_Policy_Uncertainty_Data.csv", "w", encoding="utf-8", newline="") as f: writer = csv.writer(f) # 逐行解码并写入 for line in response.iter_lines(decode_unicode=True, encoding="windows-1252"): if line: writer.writerow(line.split(","))
问题根源说明
- 你之前尝试的
iso-8859-1(Latin-1)与windows-1252高度相似,但前者不支持文件中存在的部分特殊重音字符,导致解码后出现乱码。 - 浏览器和Postman会自动检测文件编码并处理压缩响应,而代码中需要显式指定正确编码才能匹配服务器返回的内容。
- 你原有Requests代码存在语法错误:
split("","")参数错误,应该是split(","),且escapechar参数位置不正确,这也会导致写入异常。
内容的提问来源于stack exchange,提问作者diegocornejot
相关产品推荐
相关产品推荐

