为什么我的urllib.quote在python编码中从Win-1252而不是UTF-8用于CSV文件?

时间:2015-03-16 22:06:07

标签: python csv encoding utf-8 urllib

我一直在尝试对输入进行编码以使其为API请求做好准备,并且urllib.quote可以很好地处理字符串,并按照utf-8的方式对其进行编码,但是当它来自csv时文件,它以API请求无法识别的方式对其进行编码。

# -*- coding: utf-8 -*-
import urllib
r = "Handøl Sweden"
print urllib.quote(r)

返回正确的格式:

Hand%C3%B8l%20Sweden

鉴于:

# -*- coding: utf-8 -*-

import urllib
import csv

CityList = []

with open ('SiteValidate4.csv','rb') as csvfile:
    CityData = csv.reader(csvfile)
    for row in CityData:
        CityList.append(row[12])
        r = row[12]
print r
print urllib.quote(r)

返回:

Handøl Sweden
Hand%F8l%20Sweden

是否有任何修复程序可以将.csv文件的输入编码为正确的格式?

1 个答案:

答案 0 :(得分:2)

您的CSV文件已编码为CP-1252,您必须将其重新编码为UTF-8:

r = r.decode('cp1252').encode('utf8')

您的普通Python代码使用的是UTF-8 bytes ;如果您的代码编辑器确实将数据保存为您的coding: utf-8标题所暗示的UTF-8。

在Python源文件中添加PEP 263标题并不会使您从文件UTF-8数据中读取的所有数据神奇地生成;它仍然需要使用该文件的正确编解码器进行解码