iT邦幫忙

2017 iT 邦幫忙鐵人賽
DAY 28
0
自我挑戰組

Python 學習筆記系列 第 28

Day28 Python 基礎 - 字符轉編碼操作_V2

接下來講 Python3 字符轉編碼的操作,先確認Pycharm的字符編碼是 UTF-8(PyCharm Community Edition → Perferences → Editor → File Encodings → IDE Encoding → UTF-8),再來就要開始來實驗了

#!/usr/bin/env python3

import sys
print("目前系統字符編碼:", sys.getdefaultencoding())     # 打印目前系統字符編碼

s = '你好押'
s_to_gbk = s.encode(encoding='gbk')

print(s)
print(s_to_gbk)

----------------------執行結果----------------------

目前系統字符編碼: utf-8
你好押
b'\xc4\xe3\xba\xc3\xd1\xba'

Process finished with exit code 0

上面代碼的確認系統的編碼是utf-8,而你好押 變成了 b'\xc4\xe3\xba\xc3\xd1\xba',在最前面的b指的就是bytes類型,會變成這樣是因為Python3預設就是默認使用Unicode中的utf-8,而我們使用了s.encode(encoding='gbk'),導致它打印出來就是一個bytes類型,不相信!那我們來打印一個是utf-8的bytes類型

#!/usr/bin/env python3

import sys
print("目前系統字符編碼:", sys.getdefaultencoding())     # 打印目前系統字符編碼

s = '你好押'
s_to_gbk = s.encode(encoding='gbk')

print(s)
print(s_to_gbk)
print(s.encode(encoding='utf-8'))

----------------------執行結果----------------------

目前系統字符編碼: utf-8
你好押
b'\xc4\xe3\xba\xc3\xd1\xba'
b'\xe4\xbd\xa0\xe5\xa5\xbd\xe6\x8a\xbc'

Process finished with exit code 0

唔…上面代碼第三個打印出來真的是utf-8的bytes類型,那再來把gbk轉成utf-8

#!/usr/bin/env python3

import sys
print("目前系統字符編碼:", sys.getdefaultencoding())     # 打印目前系統字符編碼

s = '你好押'
s_to_gbk = s.encode(encoding='gbk')

gbk_to_utf8 = s_to_gbk.decode(encoding='gbk').encode(encoding='utf-8')      # 先把gbk轉成unicode,再轉成utf-8

print(s)
print(s_to_gbk)
print(s.encode(encoding='utf-8'))
print("utf8:", gbk_to_utf8)

----------------------執行結果----------------------

目前系統字符編碼: utf-8
你好押
b'\xc4\xe3\xba\xc3\xd1\xba'
b'\xe4\xbd\xa0\xe5\xa5\xbd\xe6\x8a\xbc'
utf8: b'\xe4\xbd\xa0\xe5\xa5\xbd\xe6\x8a\xbc'

Process finished with exit code 0

嗯!有發現什麼嗎?沒錯,第三行跟第四行打印出來的結果是一樣的,這樣就証明了這真的就是utf-8的bytes類型,那如果要把第四行還原成字符串,要怎麼弄?

#!/usr/bin/env python3

import sys
print("目前系統字符編碼:", sys.getdefaultencoding())     # 打印目前系統字符編碼

s = '你好押'
s_to_gbk = s.encode(encoding='gbk')

gbk_to_utf8 = s_to_gbk.decode(encoding='gbk').encode(encoding='utf-8')     # 先把gbk轉成unicode,再轉成utf-8
gbk_to_utf8_str = s_to_gbk.decode(encoding='gbk').encode(encoding='utf-8').decode(encoding='utf-8')


print(s)
print(s_to_gbk)
print(s.encode(encoding='utf-8'))
print("utf8:", gbk_to_utf8)
print("utf8_str:", gbk_to_utf8_str)

----------------------執行結果----------------------

目前系統字符編碼: utf-8
你好押
b'\xc4\xe3\xba\xc3\xd1\xba'
b'\xe4\xbd\xa0\xe5\xa5\xbd\xe6\x8a\xbc'
utf8: b'\xe4\xbd\xa0\xe5\xa5\xbd\xe6\x8a\xbc'
utf8_str: 你好押

Process finished with exit code 0

唔…得到正解了

這個很重要,一定要搞懂(對自已說XDDD


上一篇
Day27 Python 基礎 - 字符轉編碼操作
下一篇
Day28 Python 基礎 - 函數介紹
系列文
Python 學習筆記29

尚未有邦友留言

立即登入留言