python2.7 處理中文

python2的中文處理很麻煩,特做總結疗韵。


unicode 與 utf-8

默認的中文使用的是utf-8編碼权薯,前面加u的是Unicode編碼:


寫文件的字符串不能用Unicode編碼嗓化,可以用utf-8編碼,同理搅方,其它的IO也應該使用utf-8:

# utf-8編碼下可以正常寫文件
s = '等等'
with open('testData.txt', 'w') as fOut:
    fOut.write(s)
 
# unicode編碼時寫文件會拋出編碼異常
s = u'等等'
with open('testData.txt', 'w') as fOut:
    fOut.write(s)

unicode編碼是python的工作編碼比吭,utf-8編碼是python的IO編碼。
即字符串在內存中編輯時應該使用Unicode編碼姨涡,字符串寫入文件前應該轉換成utf-8編碼衩藤。文件中讀取出的字符串是utf-8編碼,對這字符串進行編輯前應該轉換成Unicode編碼绣溜。
為什么編輯時要用Unicode編碼而不直接用utf-8編碼慷彤?且看下圖:


如上,utf-8編碼時字符串中的每個元素是字節(jié),unicode 編碼時字符串中的元素才是一個漢字底哗。(這也是為什么要用utf-8寫文件而不用unicode)


encode 與 decode

unicode和utf-8的轉換需要使用encode和decode岁诉,這里主動忽略gb編碼。
encode是將當前的字符串(字節(jié)串)編碼成目標編碼的字節(jié)串跋选,decode是將當前的字節(jié)串解碼為Unicode編碼的字符串涕癣。所以才說Unicode是工作編碼嘛。
使用示例:

s = u'打的'    # unicode字符串
s1 = s.encode('utf-8')     # 將Unicode字符串編碼成utf-8字節(jié)串
s2 = s1.decode('utf-8')    # 將utf-8字節(jié)串解碼成unicode字符串
s = '打的'     # utf-8字節(jié)串
s2 = s.decode('utf-8')            # 將utf-8字節(jié)串解碼成Unicode字符串
s1 = s.encode('unicode escape')   # 將utf-8字節(jié)串編碼成Unicode字節(jié)串
s2 = s1.decode('utf-8')           # 將Unicode字節(jié)串解碼成Unicode字符串

用法分析:


如上圖前标,可以看到坠韩,即使兩個字符串的編碼不同,還是會判定他們相等的炼列。


讀寫文件

一般來說只搁,讀文件出來的字符串是utf-8字符,想要對此進行處理俭尖,建議先將其decode成Unicode字符串氢惋。
寫文件時要十分注意這個字符串是不是utf-8。不是就得先encode稽犁。
如果嫌麻煩焰望,也可以直接在開頭加這幾句:

import sys
reload(sys)
sys.setdefaultencoding('utf-8')

JSON 的 load 與 dump

用load函數(shù)加載json文件時,中文字符會被轉換成\u開頭的unicode碼已亥。

用dump函數(shù)寫json文件時熊赖,需要注意一個參數(shù) ensure_ascii,此參數(shù)指定是否保證文件只含ASCII字符串虑椎,默認為True震鹉。所以要將其指定為False不然中文就被轉碼了:

with open("./test.json", "w") as f:
    json.dump(elements, f, ensure_ascii=False)

也可以不直接dump而是先dumps再write:

dataOut = json.dumps(dataOut)
with open('robot_info_2.json', 'w') as fOut:
    fOut.write(dataOut.decode('unicode escape').encode('utf-8'))

案例1:將\u字符串轉換成中文

s = '\u6253\u7684'
s1 = s.decode('unicode escape') 
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市捆姜,隨后出現(xiàn)的幾起案子足陨,更是在濱河造成了極大的恐慌,老刑警劉巖娇未,帶你破解...
    沈念sama閱讀 210,914評論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異星虹,居然都是意外死亡零抬,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 89,935評論 2 383
  • 文/潘曉璐 我一進店門宽涌,熙熙樓的掌柜王于貴愁眉苦臉地迎上來平夜,“玉大人,你說我怎么就攤上這事卸亮『龆剩” “怎么了?”我有些...
    開封第一講書人閱讀 156,531評論 0 345
  • 文/不壞的土叔 我叫張陵,是天一觀的道長段直。 經(jīng)常有香客問我吃溅,道長,這世上最難降的妖魔是什么鸯檬? 我笑而不...
    開封第一講書人閱讀 56,309評論 1 282
  • 正文 為了忘掉前任决侈,我火速辦了婚禮,結果婚禮上喧务,老公的妹妹穿的比我還像新娘赖歌。我一直安慰自己,他們只是感情好功茴,可當我...
    茶點故事閱讀 65,381評論 5 384
  • 文/花漫 我一把揭開白布庐冯。 她就那樣靜靜地躺著,像睡著了一般坎穿。 火紅的嫁衣襯著肌膚如雪展父。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,730評論 1 289
  • 那天赁酝,我揣著相機與錄音犯祠,去河邊找鬼。 笑死酌呆,一個胖子當著我的面吹牛衡载,可吹牛的內容都是我干的。 我是一名探鬼主播隙袁,決...
    沈念sama閱讀 38,882評論 3 404
  • 文/蒼蘭香墨 我猛地睜開眼痰娱,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了菩收?” 一聲冷哼從身側響起梨睁,我...
    開封第一講書人閱讀 37,643評論 0 266
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎娜饵,沒想到半個月后坡贺,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,095評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡箱舞,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 36,448評論 2 325
  • 正文 我和宋清朗相戀三年遍坟,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片晴股。...
    茶點故事閱讀 38,566評論 1 339
  • 序言:一個原本活蹦亂跳的男人離奇死亡愿伴,死狀恐怖,靈堂內的尸體忽然破棺而出电湘,到底是詐尸還是另有隱情隔节,我是刑警寧澤鹅经,帶...
    沈念sama閱讀 34,253評論 4 328
  • 正文 年R本政府宣布,位于F島的核電站怎诫,受9級特大地震影響瘾晃,放射性物質發(fā)生泄漏。R本人自食惡果不足惜刽虹,卻給世界環(huán)境...
    茶點故事閱讀 39,829評論 3 312
  • 文/蒙蒙 一酗捌、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧涌哲,春花似錦胖缤、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,715評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至初烘,卻和暖如春涡真,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背肾筐。 一陣腳步聲響...
    開封第一講書人閱讀 31,945評論 1 264
  • 我被黑心中介騙來泰國打工哆料, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人吗铐。 一個月前我還...
    沈念sama閱讀 46,248評論 2 360
  • 正文 我出身青樓东亦,卻偏偏與公主長得像,于是被迫代替她去往敵國和親唬渗。 傳聞我的和親對象是個殘疾皇子典阵,可洞房花燭夜當晚...
    茶點故事閱讀 43,440評論 2 348