2016-09-30 43 views
1

我遇到了我的PYCURL请求的问题。 在服务器上我的JSON文件被编码为UTF-8和看起来像这样:PYCURL得到一个UTF-8编码问题的json文件

{ 
    "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编码我的“E”进入\ u00e8。 有没有setopt与PYCURL强制它打印好字符的选项?

回答

2

其实这是完全正确的,一旦你做了一个print的变量属性,你可以看到它打印出来很好。

这就是Python在内部处理Unicode字符串的方式。一旦PycURL收到文件,它将被转换为适合该属性的任何类型。在你的情况下,这是一个Unicode字符串。

查看this article了解更多信息。

因此,要回顾一下,如果你这样做:

>>> test = u'123 rue de Lab\u00e8uge' 
>>> print(test) 
123 rue de Labèuge 

在这里你可以看到我创建了一个Unicode字符串(先从u)。

+0

好吧我知道如何在脚本中打印好它,但我不知道如何直接使用pycurl请求获取带gode编码的文档。 – kidz55

+0

看到就是这样;该文件已经在正确的编码。你想做什么,哪里出现问题? –

+0

好吧,我明白了!这是如何在json文件中编码特殊字符,但对于用户而言,它是透明的。谢谢 – kidz55