1. 程式人生 > >Python 字元編碼

Python 字元編碼

準備

python3中,所有的字串在記憶體中均是unicode儲存(記憶體中都是如此,包括我們在開啟txt檔案的時候),當需要儲存到硬碟或者需要傳輸的時候,轉換為其他編碼(GBK,UTF-8)
str型別在記憶體中是以unicode形式存在的
bytes型別表示形式是在字串前面加b。
本文用到的函式如下:

函式 說明
ord() 檢視字元在記憶體中十進位制位元組形式
hex() 將十進位制轉換為十六進位制
encode() 將字元編碼為位元組
decode() 將位元組解碼成字元

本文需要理解概念:
\x:只是 16 進位制;
\d:十進位制;
\o:八進位制;
\u:unicode 碼;

編譯說明

常見的編碼器有(ascii/GBK/utf-8/unicode),以”碼”為例,我們來說明你在python中輸入字元的具體情況:

[In]:ord('碼') # 檢視"碼"在記憶體中儲存的位元組形式(unicode)
[Out]:
30721
[In]:hex(30721) # 檢視"碼"16進製表示
[Out]:
'0x7801'
[In]:"碼".encode("unicode_escape") # 另一種檢視"碼"16進製表示
[Out]:
b'\\u7801'
[In]:b'\\u7801'.decode("unicode_escape" ) # 使用unicode反編譯
[Out
]: '碼' [In]:"碼".encode("utf-8") # 檢視"碼"編譯成utf-8的位元組形式,\x是轉譯,將e7轉譯成十六進位制 [Out]: b'\xe7\xa0\x81' [In]:int(0xe7a081) # 檢視"碼"的utf-8十進位制位元組形式 [Out]: 15179905 [In]:b'\xe7\xa0\x81'.decode("utf-8") # 將二進位制編譯為字元 [Out]: '碼' [In]:"碼".encode("GBK") # 檢視"碼"編譯成utf-8的位元組形式,\x是轉譯,將e7轉譯成十六進位制 [Out]: b'\xc2\xeb' [In]:int(0xc2eb
) # 檢視"碼"的GBK十進位制位元組形式 [Out]: 49899 [In]:b'\xc2\xeb'.decode("GBK") # 將二進位制編譯為字元 [Out]: '碼'

讀取檔案說明

這裡寫圖片描述
一般我們說的GBK 到unicode是decode過程是不準確的,因為這個過程中本身就有decode和encode的過程

標準編碼

編解碼器 別名 語言
ascii 646,us-ascii 英語
big5 big5-tw,csbig5 繁體中文
big5hkscs big5-hkscs,hkscs 繁體中文
cp037 IBM037,IBM039 英語
cp273 273,IBM273,csIBM273 德語
cp424 EBCDIC-CP-HE,IBM424 希伯來語
cp437 437,IBM437 英語
cp500 EBCDIC-CP-BE,EBCDIC-CP-CH,IBM500 西歐
cp720 阿拉伯
cp737 希臘語
cp775 IBM775 波羅的海語言
cp850 850,IBM850 西歐
cp852 852,IBM852 中歐和東歐
cp855 855,IBM855 保加利亞語,白俄羅斯語,馬其頓語,俄語,塞爾維亞語
cp856 希伯來語
cp857 857,IBM857 土耳其
cp858 858,IBM858 西歐
cp860 860,IBM860 葡萄牙語
cp861 861,CP-IS,IBM861 冰島的
cp862 862,IBM862 希伯來語
cp863 863,IBM863 加拿大
cp864 IBM864 阿拉伯
cp865 865,IBM865 丹麥語,挪威語
cp866 866,IBM866 俄語
cp869 869,CP-GR,IBM869 希臘語
cp874 泰國
cp875 希臘語
cp932 932,ms932,mskanji,ms-kanji 日本
cp949 949,ms949,uhc 韓語
cp950 950,ms950 繁體中文
cp1006 烏爾都語
cp1026 ibm1026 土耳其
cp1125 1125,ibm1125,cp866u,ruscii 烏克蘭
cp1140 ibm1140 西歐
cp1250 windows-1250 中歐和東歐
cp1251 windows-1251 保加利亞語,白俄羅斯語,馬其頓語,俄語,塞爾維亞語
cp1252 windows-1252 西歐
cp1253 windows-1253 希臘語
cp1254 windows-1254 土耳其
cp1255 windows-1255 希伯來語
cp1256 windows-1256 阿拉伯
cp1257 windows-1257 波羅的海語言
cp1258 windows-1258 越南語
cp65001 僅限Windows:Windows UTF-8(CP_UTF8)
euc_jp eucjp, ujis, u-jis 日本
euc_jis_2004 jisx0213,eucjis2004 日本
euc_jisx0213 eucjisx0213 日本
euc_kr euckr,korean,ksc5601,ks_c-5601,ks_c-5601-1987,ksx1001,ks_x-1001 韓語
gb2312 chinese, csiso58gb231280, euc- cn, euccn, eucgb2312-cn, gb2312-1980, gb2312-80, iso- ir-58 簡體中文
gbk 936,cp936,ms936 統一中文
gb18030 gb18030-2000 統一中文
赫茲 hzgb,hz-gb,hz-gb-2312 簡體中文
iso2022_jp csiso2022jp,iso2022jp,iso-2022-jp 日本
iso2022_jp_1 iso2022jp-1,iso-2022-jp-1 日本
iso2022_jp_2 iso2022jp-2,iso-2022-jp-2 日語,韓語,簡體中文,西歐,希臘語
iso2022_jp_2004 iso2022jp-2004,iso-2022-jp-2004 日本
iso2022_jp_3 iso2022jp-3,iso-2022-jp-3 日本
iso2022_jp_ext iso2022jp-ext,iso-2022-jp-ext 日本
iso2022_kr csiso2022kr,iso2022kr,iso-2022-kr 韓語
latin_1 iso-8859-1,iso8859-1,8859,cp819,latin,latin1,L1 西歐
iso8859_2 iso-8859-2,latin2,L2 中歐和東歐
iso8859_3 iso-8859-3,latin3,L3 世界語,馬耳他語
iso8859_4 iso-8859-4,latin4,L4 波羅的海語言
iso8859_5 iso-8859-5, cyrillic 保加利亞語,白俄羅斯語,馬其頓語,俄語,塞爾維亞語
iso8859_6 iso-8859-6,arabic 阿拉伯
iso8859_7 iso-8859-7,greek,greek8 希臘語
iso8859_8 iso-8859-8,hebrew 希伯來語
iso8859_9 iso-8859-9, latin5, L5 土耳其
iso8859_10 iso-8859-10,latin6,L6 北歐語言
iso8859_11 iso-8859-11 泰語
iso8859_13 iso-8859-13,latin7,L7 波羅的海語言
iso8859_14 iso-8859-14,latin8,L8 凱爾特語
iso8859_15 iso-8859-15,latin9,L9 西歐
iso8859_16 iso-8859-16,latin10,L10 東南歐
johab cp1361,ms1361 韓語
koi8_r 俄語
koi8_t 塔吉克
koi8_u 烏克蘭
kz1048 kz_1048,strk1048_2002,rk1048 哈薩克
mac_cyrillic maccyrillic 保加利亞語,白俄羅斯語,馬其頓語,俄語,塞爾維亞語
mac_greek macgreek 希臘語
mac_iceland maciceland 冰島的
mac_latin2 maclatin2,maccentraleurope 中歐和東歐
mac_roman macroman,macintosh 西歐
mac_turkish macturkish 土耳其
ptcp154 csptcp154, pt154, cp154, cyrillic-asian 哈薩克
shift_jis csshiftjis,shiftjis,sjis,s_jis 日本
shift_jis_2004 shiftjis2004,sjis_2004,sjis2004 日本
shift_jisx0213 shiftjisx0213,sjisx0213,s_jisx0213 日本
utf_32 U32,utf32 所有語言
utf_32_be UTF-32BE 所有語言
utf_32_le UTF-32LE 所有語言
utf_16 U16,utf16 所有語言
utf_16_be UTF-16BE 所有語言
utf_16_le UTF-16LE 所有語言
utf_7 U7,unicode-1-1-utf-7 所有語言
utf_8 U8,UTF,utf8 所有語言
utf_8_sig 所有語言

python的特定編碼

編解碼器 別名 目的
idna 實現 RFC 3490,另請參見encodings.idna。僅支援errors=’strict’。
mbcs dbcs Windows only: Encode operand according to the ANSI codepage (CP_ACP)
palmos Encoding of PalmOS 3.5
punycode 實現 RFC 3492。不支援有狀態的編解碼器。
raw_unicode_escape 對於其他程式碼點,使用\uXXXX和\UXXXXXXXX進行拉丁語-1編碼。現有反斜槓不以任何方式轉義。它用於Python pickle協議。
未定義 引發所有轉換(甚至是空字串)的異常。錯誤處理程式被忽略。
unicode_escape 在ASCII編碼的Python原始碼中,編碼適合作為Unicode字面值的內容,但引號不會轉義。從Latin-1原始碼解碼。注意,Python原始碼實際上預設使用UTF-8。