初學python程式設計,
中文編碼在任何一種程式語言裡都是很坑的事情, python也難逃劫難!
最近專案需要使用python 對比兩個json檔案的某些字段是否有diff
涉及到用json.load()載入乙個json檔案,
但是如果檔案中有中文亂碼的時候, json.load會載入失敗, 需要過濾掉這些非法的字元
我選擇的方式是: 刪除亂碼字元,或者轉換亂碼字元為可讀字元
,"disp_data_query_ex":null,"diyuqeryanalysis":null,"domainanalysis":null,"dummy":0,"guanlianquerya
naysisy":null,"jiucuoqueryanaysisy":null,"omitquery":null,"queries":null,"zhidaqueryanalysis":null},"orig_query":"\u7a7f ^o?"}]}
紅色高亮的部分是中文亂碼, 最愁人的是前乙個字是正常的中文字元, 後面乙個是亂碼
此時json.load載入會報錯, 所以需要處理非法字元
ps: \u7a7f 是 中文的unicode編碼形式
python中處理不同編碼建議的方式是:
首先知道原始資料的編碼, 如果不知道那就嘗試下吧, 原始資料為 ori_data
把原始資料 ori_data 轉碼為 unicode
把unicode轉碼為其他想要的編碼形式, 比如gb18030, utf-8
**邏輯:
#!/usr/bin/python
# _*_ coding: utf-8 -*-
import os,sys
import json
import codecs
reload(sys)
sys.setdefaultencoding("utf-8")
filename="123.txt"
desname="123.utf8"
ff = open(filename, 'r')
data = ff.read()
# convert to unicode from gb18030
# 原始編碼是 gb18030, decode() 是把某種編碼轉換為 unicode編碼
data=data.decode("gb18030",'ignore')
# delete illegal char, 刪除非法字元
# 因為以unicode編碼的中文字元都是 '\u' 開頭的, 不會有 '\x'
delstr = `data`.replace('\\x','')
# 重新生成python物件
filterstr=eval(delstr)
#轉換為 utf-8編碼
data=filterstr.encode('utf-8')
#寫入目標檔案
desf=open(desname,"w")
desf.write(data)
desf.close()
# convert from unicode to utf-8
servlet編碼,解決中文亂碼
1.servlet程式獲取表單提交的值 request.getparameter 如果提交方式為post,則設定request.setcharacterencoding utf 8 如果提交方式是get,可以修改tomcat的server配置檔案,新增uriencoding utf 8 如下所示 2...
Linux中文編碼亂碼 vim shell svn
預設編碼不對,語言包沒有安裝 執行locale a grep zh zh cn zh cn.euccn zh cn.gb18030 zh cn.gb2312 zh cn.gbk zh cn.utf 8 zh hk zh hk.big5hkscs zh hk.utf 8 zh tw zh tw.big...
spring mybatis中文亂碼編碼問題
配置檔案 這裡有一點需要注意的是,在xml配置檔案中,需要將 符號轉義,所以這裡要寫成 id ds class org.apache.commons.dbcp.basicdatasource name driverclassname value com.mysql.jdbc.driver name ...