python3-字符編碼


tips:
一直被字符編發困擾,研究了一下,搞清楚了幾個概念,也明白了之前的一些疑問,現在做個簡單記錄,可做參考,不適合系統學習字符編碼。
 
ascii:占一個字節,英文字母及數字
Unicode:兩個字節,萬國碼
utf-8:可變字節
 
字節碼:一般每個字節都用十六進制來表示的,如“我愛你”用’utf-8‘轉成字節碼為:b'\xe6\x88\x91\xe7\x88\xb1\xe4\xbd\xa0'
字節碼轉二進制:把每個字節的十六進制轉成二進制就好了(轉碼都是一一對應的,要一個一個轉,沒必要)
 
在python3中,默認內存中為Unicode編碼。
字符串轉字節碼:用encode,指定’utf-8'字符集。
字節碼轉字符串:用decode,也 指定’utf-8'字符集。
 
注意:當英文轉成字節碼時,b''后面還是英文,當中文轉成字節碼時,b''后面顯示十六進制的字節碼。
a='love'
a=a.encode('utf-8')
a
b'love'
b='愛'
b=b.encode('utf-8')
b
b'\xe7\x88\xb1'

b=b.decode('utf-8')
b
'愛'
 
 
 
encode就像加密,decode就像解密,應用的時候一定注意,用什么加密就用什么解密,所以同一字符串用不同字符集轉成的字節碼也不同。
 
補充:
1、python3內存中默認為unicode編碼
2、python2默認為ascii編碼,所以如果定義a='漢字',直接打印會報錯,改成如下圖,指定字符集,打印前decode
 
3、查整數對應的unicode字符,查漢字對應的整數
      python2有unichr(),python3默認就是unicode,所以不用unichr()方法
>>> chr(28879)
'烏'
>>> ord('一')
19968
4、因為默認就是unicode,unicode是有漢字的,所以直接定義為漢字,打印也不會報錯。
    不過看到的雖然是漢字,如果要寫到文檔中不進行utf-8轉碼的話,打開文檔會亂碼。(好像默認進行utf-8轉碼)
 
5、字符串前面的 u
    在Python2中,普通字符串是以8位ASCII碼進行存儲的,而Unicode字符串則存儲為16位unicode字符串,這樣能夠表示更多的字符集。使用的語法是在字符串前面加上前綴 u。
    在Python3中,所有的字符串都是Unicode字符串,所以字符串前面不需要加u也是unicode存儲
      字符串前面的 r
               原始字符串,轉移符等無效
 
6、bytes類型和string類型
       bytes是比特流,也就是字節碼,2進制串,我們通常表示為16進制
       string是字符串
       encode()是字符串的方法,decode()是bytes類型的方法,指定字符集后相互轉換
>>> b='啊'.encode('utf8')
>>> b
b'\xe5\x95\x8a'
>>> type(b)
<class 'bytes'>
 
7、我們看到的任何字(漢字韓語日語)都有它的編碼方式,windows默認為gbk,linux默認為utf-8,python默認為unicode,一個文檔以什么編碼方式存,就以什么方式打開。
 
8、同一個漢字,用不同字符集編碼的字節碼都不同
>>> '哈'.encode('unicode-escape')
b'\\u54c8'
>>> '哈'.encode('utf-8')
b'\xe5\x93\x88'
>>> '哈'.encode('gbk')
b'\xb9\xfe'
    
 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM