1. 程式人生 > >亂碼問題引申 python 中string和unicode

亂碼問題引申 python 中string和unicode

-c 錯誤方法 odin 版本 需要 content 2.7 encode 我們

HtmlTestRunner的亂碼問題


1生成的報告中,對print打印的數據都記錄下來,但是數據有些會存在亂碼。如下面。有些又沒有亂碼。 技術分享

技術分享 這到底是怎麽回事呢? str=t.encode(‘utf-8‘) print str 第一個test我以utf-8編碼,看來htmlTestRunner不是utf-8 編碼。 為何第二個正確了呢? 第二個是unicode編碼方式。 也就是說,可以被其他任何encode了。 技術分享 原碼中已這個進行編碼,也就是說他設置為latin-1這種編碼方式了。估計是作者自己國家的一種編碼方式。 技術分享

修改為如下後,問題解決 技術分享 技術分享

說明,python2.7以下以上修改就可以,python3以上版本還需修改其他地方。我是從蟲師書裏進行修改再來研究這個問題的。

引申出來一個問題。string和unicode


string類型是字符串。會形成不同的編碼集。 輸入時為utf-8編碼,輸出時設置的編碼集為utf-8。他就解碼正常,會正確打印輸入的內容。 如果輸入時為utf-8。輸出為gbk呢?就會亂碼。 技術分享

技術分享

如何進行編碼


#代碼中設置編碼格式 #coding:utf-8 # -*-coding=utf-8 -*-

如何解碼


如果是後臺日誌,他會自動解碼,如果是前臺頁面。或者數據庫呢? 他們都設置了類似的編碼格式。 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> 所有不需要我們做什麽,雙方定義好了規則,他們自動的編碼和解碼了。 輸入:print(‘你好‘) 前臺就打印了你好。

如何解決亂碼


如果定錯了,就會出現亂碼。這就是亂碼的由來。就像上方所說:如果輸入時為utf-8。輸出為gbk呢?就會亂碼。 這時候就是看問題出在哪方,把規則定義好。 上面只講述了輸入輸出雙方的自動編碼和解碼。可在python中提供一套編碼和解碼的方法(其他語言肯定也提供一套方法)。 這時候需要說說unicode。unicode是國際統一碼,就如同標準時間一樣。是唯一的。包含UTF-8/UTF-16/UTF-32. utf-8屬於unicode的一個小子集。不多擴展了,說多了自己也亂了。 # -*- coding=GB2312 -*- print ‘string類型,默認為gbk編碼‘,repr(‘你好‘) print ‘unicode編碼 ‘,repr(u‘你好‘)
string類型,默認為gbk編碼 ‘\xc4\xe3\xba\xc3‘ unicode編碼 u‘\u4f60\u597d‘ 改變默認編碼方式後。 # -*- coding=UTF-8 -*- print ‘string類型,默認為UTF-8編碼‘,repr(‘你好‘) print ‘unicode編碼 ‘,repr(u‘你好‘)
string類型,默認為UTF-8編碼 ‘\xe4\xbd\xa0\xe5\xa5\xbd‘ unicode編碼 u‘\u4f60\u597d‘ 默認編碼方法下,改變個別編碼方式 #coding=utf-8 #print repr(‘你好‘.encode(‘gbk‘).decode())#以gbk解碼【錯誤方法】報錯 print repr(‘你好‘.decode()),‘
||string類型變成unicode類型‘# 轉換成了unicode方法 print repr(u‘你好‘.encode(‘gbk‘)),‘ ||unicode編碼方式,再設置編碼方式為gbk(gb2312)的string類型‘ print repr(‘你好‘.decode().encode(‘gbk‘)),‘ ||string類型變成unicode類型後 ,再設置編碼方式為gbk(gb2312)的string類型‘#轉化成gbk編碼
u‘\u4f60\u597d‘ ||string類型變成unicode類型 ‘\xc4\xe3\xba\xc3‘ ||unicode編碼方式,再設置編碼方式為gbk(gb2312)的string類型 ‘\xc4\xe3\xba\xc3‘ ||string類型變成unicode類型後 ,再設置編碼方式為gbk(gb2312)的string類型

亂碼問題引申 python 中string和unicode