但我們處理文章或是網頁的時候,常會遇到編碼問題,這邊做個整理
1. 產生 UNICODE 字串 or bytes 字串的方法
2. UNICODE 與 bytes 字串間的轉換
3. 利用 encode 與 decode 切換 UNICODE 與其他編碼
4. 不同編碼間要轉換,請切回 UNICODE
=============================================================
1. 產生 UNICODE 字串 or bytes 字串的方法
(標準產生法,字串前加b的內容,只能是 ASCII code)
我們宣告任何字串,預設就是 UNICODE, 不需要前面特別加個小 u
tmpStr0 = 'byte' #預設就是 UNICODE
tmpStr1 = b'byte' tmpStr2 = 'Unicode字串' tmpStr3 = u'Unicode字串' print(type(tmpStr0)) print(type(tmpStr1)) print(type(tmpStr2)) print(type(tmpStr3)) if tmpStr2 == tmpStr3: print("預設字串就是 Unicode 字串") >>> <class 'str'> <class 'bytes'> <class 'str'> <class 'str'> 預設字串就是 Unicode 字串 |
2. UNICODE 與 bytes 字串間的轉換
Python3 預設編碼是 UNICODE ,他對於字串只有兩種格式,就是'str' or 'bytes'
當你創造一個字串,就是 UNICODE 格式,
轉成別種格式後,就變成 Byte Array
輸出結果
3. 利用 encode 與 decode 切換 UNICODE 與其他編碼
一個字串,initial 的時候是 'str' type, 當換成別種格式,就會變成 bytes,
Decode 回來後,又會變成 'str'
輸出:
4. 不同編碼間要轉換,請切回 UNICODE
以下範例將 big5 轉回 UTF-8
輸出:
轉成別種格式後,就變成 Byte Array
tmpStr = '讚呀'
tmpStr1 = tmpStr
print("tmpStr1", tmpStr)
print("tmpStr1", type(tmpStr)) # 原始字串,type 是 str
tmpStr2 = tmpStr.encode('big5')
print("tmpStr2", tmpStr2)
print("tmpStr2", type(tmpStr2)) # 新編碼字串,type 自動變成 bytes
tmpStr3 = bytes(tmpStr, 'big5')
print("tmpStr3", tmpStr3)
print("tmpStr3", type(tmpStr3)) # 新編碼字串,type 自動變成 bytes
if (tmpStr2 == tmpStr3):
print("兩種轉法相同")
else:
print("兩種轉法不同")
|
輸出結果
tmpStr1 讚呀
tmpStr1 <class 'str'>
tmpStr2 b'\xc6g\xa7r'
tmpStr2 <class 'bytes'>
tmpStr3 b'\xc6g\xa7r'
tmpStr3 <class 'bytes'>
兩種轉法相同
|
3. 利用 encode 與 decode 切換 UNICODE 與其他編碼
一個字串,initial 的時候是 'str' type, 當換成別種格式,就會變成 bytes,
Decode 回來後,又會變成 'str'
tmpStr = '讚呀'
tmpStr2 = tmpStr
tmpStr2 = tmpStr2.encode('big5') # tmpStr2 一經轉換,就自動變成 bytes
print('1', type(tmpStr2))
tmpStr2 = tmpStr2.decode('big5') # 使用decode轉回後,自動變成 'str'
print('2', type(tmpStr2))
|
1 <class 'bytes'>
2 <class 'str'>
|
4. 不同編碼間要轉換,請切回 UNICODE
以下範例將 big5 轉回 UTF-8
tmpStr = '讚呀'
tmpStr2 = tmpStr
tmpStr2 = tmpStr2.encode('big5') # tmpStr2 一經轉換,就自動變成 bytes
print('1', type(tmpStr2))
tmpStr2 = tmpStr2.decode('big5') # 使用decode轉回後,自動變成 'str'
print('2', type(tmpStr2))
tmpStr2 = tmpStr2.encode('UTF-8')
print('3', type(tmpStr2))
|
1 <class 'bytes'>
2 <class 'str'>
3 <class 'bytes'> |