程序開發中,不同語言文字的顯示,不同字符集之間的轉換非常麻煩,在python的unicode的使用中,對這點感觸頗深。所以,以下總結了python中對unicode字符處理的一些理解。
程序存儲、傳輸、操作字符串時,對代碼中寫好的字符串或者手動輸入的字符串,程序會自動將這些字符串按照某種字符集編碼(一般為本地系統字符編碼)將字符串轉換為字節碼,這是字符的“解碼”,將顯示的字符轉化為字節碼;
程序中顯示文字時,計算機讀取一串字節,選擇合適的字符集(一般為本地系統字符集)將字節碼翻譯為字符集中對應的字符,這些字符一般為本地存儲的字符圖片,然后調用系統的顯示接口將這些“圖片”打印在屏幕上。這是字符的“編碼”,將字節碼轉化為可顯示的字符。 如果字符的解碼和編碼采用的是相同的字符集,則將顯示出來原始給定的字符,結果正常;如果不是同一種字符集,則有可能會出現亂碼(因為相同的字節碼在不同的字符集中可能對應不同的字符,一種字符集的某字符解碼后的字節碼在另一種字符集中編碼之后可能是不同的字符)。
為了方便的處理不同字符集編碼的字符之間的相互轉化,定義了unicode標准,即將世界上所有的字符統一起來,每個字符都分配一個唯一的id,作為該字符的unicode碼值。在代碼中寫定字符或者程序輸入字符后,可以先將字符轉化為unicode"字符",這是“解碼”過程;進行一系列操作之后,如果需要顯示出原來的字符,則將unicode"字符"轉化為對應的字符集中該字符所對應的字節碼,然后找到對應的字符,進而顯示。
這樣,不同字符集編碼就通過unicode"字符"聯系了起來。
#直接定義unicode字符串,通過在字符串前加 u 的方式 unicodestring = u"Hello world" utf8string = '好人' #可以這樣直接寫,是因為在py文件的開頭寫了 #encoding=utf-8, 這樣在整個py # 文件中,所有的字符串的編碼編碼方式都設置為了utf-8 #將某種字符集編碼的字符串轉化為unicode字符串, 即“解碼” ustring = unicode(utf8string, "utf-8") ustring # 輸出 u'\u597d\u4eba' print type(ustring) # 輸出 <type 'unicode'> #將unicode字符串轉化為某種字符集編碼的字符串,即“編碼” unicodestring.encode("utf-8") ustring.encode('utf-8') print ustring.encode('utf-8') # 輸出 好人, 解碼到unicode和從unicode編碼的字符集相同 print ustring.encode('gbk') #輸出亂碼 濂戒漢, 解碼到unicode和從unicode編碼的字符集不同
以上部分為參考網絡+自己yy,如果有錯誤,歡迎指正~