首頁  >  問答  >  主體

python - 微信中网页授权获取用户基本信息后得到中文乱码

打印出返回的用户信息的json值,如果是中文会出现乱码,比如省份,得到的值为u'province': u'\xe6\xb5\x99\xe6\xb1\x9f', 不知道哪里出错了。
另外,如果对返回的json值作解码,居然会出现40029错误。

阿神阿神2742 天前877

全部回覆(3)我來回復

  • 高洛峰

    高洛峰2017-04-17 15:40:02

    沒有錯啊,題主你試試print 'xe6xb5x99xe6xb1x9f',這不就是印出來是「浙江」麼。

    首先,python2的print有bug,就是雖然x = {‘province': '浙江'},但print x還是會顯示{'province': 'xe6xb5x99xe6xb1x9f'}。

    這個問題到Python3裡已經解決了。

    但仔細觀察一下這不是你的case。你的問題是以utf8編碼的字串被當成unicode編碼的字串放進unicode物件裡去了。

    這時候只要(假設你的json反序列化之後的物件存在x裡)

    python>>> print x[u'province'].encode('raw_unicode_encoding')
    '浙江'
    

    Voilà!

    回覆
    0
  • PHPz

    PHPz2017-04-17 15:40:02

    應該是沒有設定編碼格式的問題,在取得使用者資訊的時候設定編碼為UTF-8,另外取得使用者資訊介面https://api.weixin.qq.com/cgi-bin/user/info?access_token=ACCESS_TOKEN&openid=OPENID&lang=zh_CN中的參數lang=zh_CN要帶上。
    至於40029錯誤,可能是授權取得到的code已經過期,code只能使用一次,5分鐘未被使用自動過期。

    回覆
    0
  • 大家讲道理

    大家讲道理2017-04-17 15:40:02

    @lohocla4dam 的答案給我幫助很多,只是我需要做些補充,因為他的答案是針對python2的,我這裡的python3的

    根據 https://docs.python.org/3/library/codecs...,encoding換成raw_unicode_escape,即

    >>> print(x['province'].encode('raw_unicode_escape')

    回覆
    0
  • 取消回覆