第4章 文字和位元組序列 了解編碼問題

2021-10-08 11:48:49 字數 1639 閱讀 6885

"""

常見編譯碼異常:

unicodeencodeerror:編碼錯誤,將字串編碼成位元組串(二進位制位元組序列)時的異常;

unicodedecodeerror:解碼錯誤,將位元組串(二進位制位元組序列)解碼成字串時的異常;

syntaxerror:如果原始碼的編碼與預期不符,載入 python 模組時還可能丟擲 syntaxerror 異常;

"""# 4.4.1 處理編碼時 unicodeencodeerror 異常:----------------

city = 'são paulo'

# utf-? 能處理任何字串

a = city.encode('utf8')

print(a) # b's\xc3\xa3o paulo'

# unicodeencodeerror,cp437 編碼無法處理 ã 字元

# b = city.encode('cp437')

# 處理 unicodeencodeerror 異常:---

# errors='ignore' 忽略無法處理的字元,強烈不推薦使用

b = city.encode('cp437', errors='ignore')

print(b) # b'so paulo'

# errors='replace' 替換無法處理的字元為 ? 號,推薦使用

b = city.encode('cp437', errors='replace')

print(b) # b's?o paulo'

# errors='xmlcharrefreplace' 將無法編碼的字元處理成 xml 實體

b = city.encode('cp437', errors='xmlcharrefreplace')

print(b) # b'são paulo''

# 4.4.2 處理解碼時 unicodeencodeerror 異常:---------------------------

octets = b'montr\xe9al'

a = octets.decode('latin1')

print(a) # 正常的解碼

octets = b'montr\xe9al'

b = octets.decode('iso8859_7')

print(b) # montrιal 有的編碼器會解碼成其他字元

# unicodedecodeerror:urf8 碰到無法解碼的字元會丟擲異常

# c = octets.decode('utf8')

# 處理 unicodedecodeerror 異常:---

c = octets.decode('utf8', errors='replace')

print(c) # montr�al,官方指定將 utf8 無法處理的字元替換為 � ,表示未知字元。

# 4.4.3 使用預期之外的編碼載入模組時丟擲的 syntaxerror:--------------------------------------

# python3 預設使用 utf8 編碼原始碼,python 在載入 utf8 之外的編碼的原始碼時會丟擲 syntaxerror;

# 解決辦法就是在載入的檔案頂部新增注釋,例如:# code: cp1251

第4章 文字和位元組序列(上)

unicode標準把字元的標識和具體的位元組表述進行如下區分 將碼位轉換成位元組序列的過程是編碼,把位元組序列轉換成碼位的過程是解碼。如下例 b 哈哈哈 encode utf 8 b b xe5 x93 x88 xe5 x93 x88 xe5 x93 x88 b.decode utf 8 哈哈哈 p...

C Primer 第4版 第4章 陣列和指標

p95 設計良好的程式只有在強調速度時才在類實現的內部使用陣列和指標。p96陣列的維數必須用值大於等於1的常量表示式定義。此常量表示式只能包含整型字面值常量 列舉型別或者用常量表示式初始化的整型const物件。非const物件以及要到執行階段才知道其值的const變數都不能用於定義陣列的維數。p97...

第4章陣列和指標

陣列的定義和初始化 注意 1.顯示初始化陣列元素 在函式體外定義的內建陣列,其元素均初始化為0 在函式體內定義的內建陣列,其元素無初始化 不管陣列在 定義,如果其元素為類型別,則自動呼叫該類的預設建構函式進行初始化,如果該類沒有預設建構函式,則必須為該陣列的元素提供顯式的初始化。2.特殊的字元陣列 ...