PYCURL 得到一个 json 文件,有 utf-8 编码问题
PYCURL get a json file with utf-8 encoding problems
我的 PYCURL 请求遇到问题。
我在服务器上的 json 文件是用 utf-8 编码的,看起来像这样:
{
"address" : "123 rue de Labège"
}
我使用 PYCURL 获取这个 json 并将其复制到我计算机上的一个新文件中。
我使用 Python 2.7,这是我对 PYCURL 的设置:
def setup(self, _url, _method, _login, _passwd, _path, *args, **kwargs):
self.curl = pycurl.Curl()
self.url = 'https://%s:%d/' % (self.ip, self.port) + _url
self.method = _method
self.userpwd = '%s:%s' % (_login, _passwd)
self.path = _path
self.curl.setopt(pycurl.URL, self.url)
curl_method = {
"GET": pycurl.HTTPGET,
"POST": pycurl.POST
}
if self.method in curl_method:
self.curl.setopt(curl_method[self.method], 1)
else:
self.curl.setopt(pycurl.CUSTOMREQUEST, self.method)
self.curl.setopt(pycurl.SSL_VERIFYPEER, 0)
self.curl.setopt(pycurl.SSL_VERIFYHOST, 0)
self.curl.setopt(pycurl.HTTPAUTH, pycurl.HTTPAUTH_BASIC)
self.curl.setopt(pycurl.USERPWD, self.userpwd)
if _url == 'MY_FILE_JSON':
filename = 'file.json'
self.file = open(self.path + filename, 'wb')
self.curl.setopt(pycurl.WRITEDATA, self.file)
问题出在我正在获取的文件中:
{
"address" : "123 rue de Lab\u00e8uge"
}
我不明白为什么 PYCURL 将我的“è”编码成 \u00e8。
setopt 和 PYCURL 是否有任何选项来强制它打印好的字符?
实际上这是完全正确的,一旦你对变量 属性 执行 print
,你可以看到它打印出来很好。
这就是 Python 内部处理 Unicode 字符串的方式。一旦 PycURL 接收到文件,它将被转换为适合 属性 的任何类型。在您的例子中,这是一个 Unicode 字符串。
查看 this article 了解更多信息。
所以回顾一下,如果你这样做:
>>> test = u'123 rue de Lab\u00e8uge'
>>> print(test)
123 rue de Labèuge
在这里你可以看到我创建了一个 Unicode 字符串(以 u
开头)。
我的 PYCURL 请求遇到问题。 我在服务器上的 json 文件是用 utf-8 编码的,看起来像这样:
{
"address" : "123 rue de Labège"
}
我使用 PYCURL 获取这个 json 并将其复制到我计算机上的一个新文件中。 我使用 Python 2.7,这是我对 PYCURL 的设置:
def setup(self, _url, _method, _login, _passwd, _path, *args, **kwargs):
self.curl = pycurl.Curl()
self.url = 'https://%s:%d/' % (self.ip, self.port) + _url
self.method = _method
self.userpwd = '%s:%s' % (_login, _passwd)
self.path = _path
self.curl.setopt(pycurl.URL, self.url)
curl_method = {
"GET": pycurl.HTTPGET,
"POST": pycurl.POST
}
if self.method in curl_method:
self.curl.setopt(curl_method[self.method], 1)
else:
self.curl.setopt(pycurl.CUSTOMREQUEST, self.method)
self.curl.setopt(pycurl.SSL_VERIFYPEER, 0)
self.curl.setopt(pycurl.SSL_VERIFYHOST, 0)
self.curl.setopt(pycurl.HTTPAUTH, pycurl.HTTPAUTH_BASIC)
self.curl.setopt(pycurl.USERPWD, self.userpwd)
if _url == 'MY_FILE_JSON':
filename = 'file.json'
self.file = open(self.path + filename, 'wb')
self.curl.setopt(pycurl.WRITEDATA, self.file)
问题出在我正在获取的文件中:
{
"address" : "123 rue de Lab\u00e8uge"
}
我不明白为什么 PYCURL 将我的“è”编码成 \u00e8。 setopt 和 PYCURL 是否有任何选项来强制它打印好的字符?
实际上这是完全正确的,一旦你对变量 属性 执行 print
,你可以看到它打印出来很好。
这就是 Python 内部处理 Unicode 字符串的方式。一旦 PycURL 接收到文件,它将被转换为适合 属性 的任何类型。在您的例子中,这是一个 Unicode 字符串。
查看 this article 了解更多信息。
所以回顾一下,如果你这样做:
>>> test = u'123 rue de Lab\u00e8uge'
>>> print(test)
123 rue de Labèuge
在这里你可以看到我创建了一个 Unicode 字符串(以 u
开头)。