python編碼介紹及中文亂碼過濾

2021-09-30 12:14:57 字數 1593 閱讀 9684

初學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 ...