乱码问题引申 python 中string和unicode
生活随笔
收集整理的這篇文章主要介紹了
乱码问题引申 python 中string和unicode
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
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是國際統一碼,就如同標準時間一樣。是唯一的。 def test_encode_decode():''' . 展示 str的編碼方式 . encode(),decode()方法內默認編碼格式為utf-8''''基本方式'print repr('你好'), ' string(utf-8)'print repr(u'你好'), ' unicode(unicode)''錯誤使用: string(utf-8) -> string(gbk)【錯誤】 -> unicode(unicode)'#print repr('你好'.encode('gbk').decode())#以gbk解碼【錯誤方法】報錯'單獨使用decode,encode'print repr('你好'.decode()), ' string(utf-8) -> unicode(unicode)'# 轉換成了unicode方法print repr(u'你好'.encode('gbk')), ' unicode(unicode) -> string(gbk)''組合使用decode,encode: 更改string的編碼類型,編碼再解碼'print repr('你好'.decode().encode('gbk')), ' string(utf-8) -> unicode(unicode) -> string(gbk)'print repr('你好'.encode('utf-8').decode()), ' string(utf-8) -> string(utf-8) -> unicode(unicode)'#與 '你好'.decode() 結果一致'gbk -> unicode'str1=u'你好'.encode('gbk')#gbk編碼print repr(str1.decode('gbk')), ' string(gbk) -> unicode(unicode)' print repr(str1.decode('gbk').encode()), ' string(gbk) -> unicode(unicode) -> string(utf-8)'
結果為
?
轉載于:https://www.cnblogs.com/q2z2012/p/7449284.html
總結
以上是生活随笔為你收集整理的乱码问题引申 python 中string和unicode的全部內容,希望文章能夠幫你解決所遇到的問題。