Thursday 21 April 2022

Python2.X json.load() unicode utf-8 Issue ( Sloved )

 

發生問題:

在mobu 2020利用os 連接路徑報錯,發現以Json.load()的字典格式,為unicode

而mobu無法辨識,需先將用到字串利用string.encode('utf-8')

才能使用

後來想想覺得應是在open()時,就可以先轉換,就不用對個案一個一個轉換

在網路查了相關的關鍵字"python2.x,  json.load, dict, unicode, utf-8, open"

試了多個覺得可行的方式

像是open加入encoding

或是json.dump()加入encoding

import io

都沒什麼用

最後找到這個解最簡單,原網址https://www.jianshu.com/p/90ecc5987a18


Python2.x Code Sample:

 def Read_Dict_Data( Dict_Data ):  
   import json  
   def byteify(input, encoding='utf-8'):  
     if isinstance(input, dict):  
       return {byteify(key): byteify(value) for key, value in input.iteritems()}  
     elif isinstance(input, list):  
       return [byteify(element) for element in input]  
     elif isinstance(input, unicode):  
       return input.encode(encoding)  
     else:  
       return input  
   with open ( Dict_Data )as f:  
     data = json.load(f, encoding = 'UTF-8')# it is useless adding encoding when use json.load()  
     return byteify(data)  

如果是Python3就沒有以上問題

多數網頁都沒清楚的說明python2與3的差別,所以記錄一下

No comments: