python - 微信中网页授权获取用户基本信息后得到中文乱码
阿神
阿神 2017-04-17 15:38:02
0
3
943

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

阿神
阿神

闭关修行中......

全部回覆(3)
小葫芦

沒有錯啊,題主你試試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à!

PHPzhong

應該是沒有設定編碼格式的問題,在取得使用者資訊的時候設定編碼為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分鐘未被使用自動過期。

大家讲道理

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

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

>>> print(x['province'].encode('raw_unicode_escape')
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板