2016-09-30 3 views
1

私のPYCURLリクエストに問題があります。 サーバー上の私のJSONファイルはUTF-8でエンコードされ、次のようになりさ:PYCURLがutf-8エンコーディングの問題を持つjsonファイルを取得します

{ 
    "address" : "123 rue de Labège" 
} 

私はこのJSONを取得するためにPYCURLを使用して、自分のコンピュータ上の新しいファイルにコピーします。 私は、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リクエストを使ってコードエンコードした文書を直接取得する方法はわかりません。 – kidz55

+0

それはものです。ドキュメントはすでに適切なエンコーディングになっています。あなたは何をしようとしていますか、どこが間違っているのを見ていますか? –

+0

私は理解しています!特殊文字はjsonファイルでエンコードされますが、ユーザーにとっては透明です。ありがとうございます – kidz55

関連する問題