應用場景以下:從api下載數據,json解析,存入字典,按期保存。重啓程序須要加載保存的文本。python
問題1:json中都是unicode串,存到文本里都是些\u***json
解決:關閉ensure_ascii開關api
json.dump(pub.listData,fp,ensure_ascii=False)編碼
問題2:字典關鍵字用的數字,從文本load後變爲unicode串excel
解決:code
走了一點彎路,網上的解決方法,都是轉換,把串轉回utf-8,方法是utf-8
def byteify(input):ci
if isinstance(input, dict):element
return {byteify(key):byteify(value) for key,value in input.iteritems()}unicode
elif isinstance(input, list):
return [byteify(element) for element in input]
elif isinstance(input, unicode):
return input.encode('utf-8')
else:
return input
但發現,json相關的都是unicode,轉不勝轉。
最後解決方法,仍是用unicode存,可是load後,加一個處理,把key轉換爲數值就行
pub.listData=json.load(fp)
pub.listData={int(k):v for k,v in pub.listData.items()}
問題3:編碼問題
解決:
默認狀況下,用sys.getdefaultencoding()查看是utf-8
decode(code):把code轉換爲unicode
encode(code):把unicode轉換爲code
若是對一個非unicode格式的串,調用encode的話,則會用默認編碼轉化爲unicode,再進行encode。系統默認編碼爲ascii,因此經常出錯
設置默認編碼:
在python的Lib\site-packages文件夾下新建一個sitecustomize.py,內容爲:
# encoding=utf8
import sys
reload(sys)
sys.setdefaultencoding('utf8')
問題4:讀入unicode的中文的處理
好比csv文件,excel正常,python讀入數據相似:
[18]:'\xc2\xf2\xd2\xbb\xc1\xbf'
直接輸出爲亂碼,須要解碼再編碼:
print df.columns[0].decode("gbk").encode('utf-8')
市場代碼