【问题标题】:PYCURL get a json file with utf-8 encoding problemsPYCURL 得到一个带有 utf-8 编码问题的 json 文件
【发布时间】:2016-09-30 09:07:29
【问题描述】:

我的 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。 带有 PYCURL 的 setopt 是否有任何选项可以强制它打印好字符?

【问题讨论】:

    标签: python utf-8 pycurl


    【解决方案1】:

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

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

    查看this article 了解更多信息。

    所以回顾一下,如果你这样做:

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

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

    【讨论】:

    • 好吧,我知道如何在我的脚本中很好地打印它,但我不知道如何直接通过 pycurl 请求获取带有 gode 编码的文档。
    • 看就是这样;该文档已经采用正确的编码。你想做什么,你发现哪里出错了?
    • 好的,我明白了!这就是特殊字符在 json 文件中的编码方式,但对于用户来说,它是透明的。谢谢
    • 没问题,玩得开心!
    猜你喜欢
    • 1970-01-01
    • 2013-06-04
    • 2010-12-11
    • 2016-01-08
    • 2010-12-01
    • 1970-01-01
    相关资源
    最近更新 更多