字符串與編碼

在最新的Python 3版本中,字符串是以Unicode編碼的,即Python的字符串支持多語言
html

編碼和解碼
  字符串在內存中以Unicode表示,在操做字符串時,常常須要str和bytes互相轉換
  字符串是能夠直接在內存上進行處理的,但若是要將其傳輸到網絡或磁盤上,須要將其編碼,反過來則須要解碼,由於str是不能夠直接存儲在磁盤上或在網絡上傳輸的
  若是將字符串從內存傳輸到網絡或保存到磁盤,則要把str轉換爲以字節爲單位的bytes,稱爲編碼
  若是要從網絡或磁盤上獲取字符串,則要從網絡上或者磁盤上讀取字節流,並把bytes轉換爲str,稱爲解碼
  爲避免亂碼問題,應當始終堅持使用UTF-8編碼對str和bytes進行轉換,關於編碼,請參照字符編碼python

 

使用示例: 網絡

單個字符的編碼函數

print(ord('A')) #輸出:65,獲取字符的整數表示
print(chr(66)) #輸出:B,把編碼轉換爲對應的字符

 

十六進制表示編碼

print('中文') #輸出:'中文',
print('\u4e2d\u6587') #輸出:'中文','\u4e2d\u6587'和'中文'徹底對等,若是知道字符的整數編碼,還能夠用十六進制這麼寫str

 

bytes類型的數據表示spa

x = b'ABC' #Python對bytes類型的數據用帶b前綴的單引號或雙引號表示,'ABC'和b'ABC'在顯示上徹底同樣,但bytes的每一個字符都只佔用一個字節

 

編碼code

print('ABC'.encode('ascii')) #輸出:b'ABC',以Unicode表示的str經過encode()方法能夠編碼爲指定的bytes
print('中文'.encode('utf-8')) #輸出:b'\xe4\xb8\xad\xe6\x96\x87',
print('中文'.encode('ascii')) #輸出:報錯,由於中文字符在ascii編碼範圍外,因此致使編碼失敗

 

解碼htm

print(b'ABC'.decode('ascii')) #輸出:'ABC'
print(b'\xe4\xb8\xad\xe6\x96\x87'.decode('ascii')) #輸出:'中文'
print(b'\xe4\xb8\xad\xff'.decode('utf-8', errors='ignore')) #輸出:'中',若是bytes中只有一小部分無效的字節,能夠傳入errors='ignore'忽略錯誤的字節

 

計算長度blog

#len(a)函數返回a的長度,若是a是字符串則返回字符數,若是a是字節表示則返回字節數
print(len('中文')) #輸出:2,共2個字符
print(len('ABC')) #輸出:3,共3個字符
print(len(b'ABC')) #輸出:3,共是3個字節
print(len(b'\xe4\xb8\xad\xe6\x96\x87')) #輸出:6,共是6個字節
print(len('中文'.encode('utf-8'))) #輸出:6, 1箇中文字符通過UTF-8編碼後一般會佔用3個字節,所以兩個漢字的字節數是6

 

源碼文件開頭與編碼內存

#!/usr/bin/env python3       告訴Linux/OS X系統,這是一個Python可執行程序,Windows系統會忽略這個註釋
# -*- coding: utf-8 -*-      告訴Python解釋器,按照UTF-8編碼讀取源代碼,不然在源代碼中寫的中文輸出可能會有亂碼

#注意:告訴編譯器使用UTF-8編碼的同時,.py文件也要保存爲UTF-8 without BOM編碼,二者統一了,纔可確保文件中的中文正常顯示
相關文章
相關標籤/搜索