2017年9月17日 星期日

Python - UNICODE字串與bytes字串的關聯性與轉換

Python3 預設就是使用 UNICODE 字串
但我們處理文章或是網頁的時候,常會遇到編碼問題,這邊做個整理


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
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'>

沒有留言:

張貼留言

Python - UNICODE字串與bytes字串的關聯性與轉換

Python3 預設就是使用 UNICODE 字串 但我們處理文章或是網頁的時候,常會遇到編碼問題,這邊做個整理 1. 產生 UNICODE 字串 or bytes 字串的方法 2. UNICODE 與 bytes 字串間的轉換 3. 利用 encode 與 deco...