Python編碼問題

2022-05-03 08:54:14 字數 2421 閱讀 6029

python3中,所有的字串在記憶體中均是unicode儲存。

t = 'abc'

上述語句在計算機記憶體的執行順序是這樣的:

雖然記憶體總是unicode儲存,但是輸出到檔案中就是utf-8或者gbk等格式,根據檔案的編碼型別不同而不同。

字元轉十進位制unicode碼

>>> ord("中")

20013

十進位制unicode碼轉字元

>>> chr(20013)

'中'

注意內容:轉換方法:

str轉換為bytes

>>> '中國'.encode('utf-8')

b'\xe4\xb8\xad\xe6\x96\x87'

>>> '中文'.encode('gbk')

b'\xd6\xd0\xce\xc4'

>>> '中文'.encode('ascii')

unicodeencodeerror traceback (most recent call last)

in ()

1 '中文'.encode('ascii')

unicodeencodeerror: 'ascii' codec can't encode characters in position 0-1: ordinal not in range(128)

第三條語句會報錯,因為ascii編碼無法解析中文

bytes轉換為str

>>> b'\xe4\xb8\xad\xe6\x96\x87'.decode('utf-8')

'中文'

>>> b'\xd6\xd0\xce\xc4'.decode('gbk')

'中文'

demo_str = '巨集傑'  # python3 預設的編碼為unicode

# unicode 轉換為 gb2312

unicode_gb2312 = demo_str.encode(』gb2312『) # 因為demo_str預設是unicode,所以不需要decode()成str。直接encode成要轉換的編碼gb2312。

print('gb2312:', unicode_gb2312)

b'\xba\xea\xbd\xdc'

# gb2312 轉換為 utf-8

gb2312_utf8 = unicode_gb2312.decode('gb2312').encode('utf-8') # 當前字元為gb2312所以要先decode成unicode(decode中傳入的引數為當前字元的編碼集)然後再encode成utf-8

print('utf-8: ', gb2312_utf8)

# utf8 轉換為 gbk

utf8_gbk = gbk2312_utf8.decode('utf-8').encode('gbk') # 當前字符集編碼為utf-8,要想轉換成gbk,要先decode成unicode字符集,再encode成gbk字符集。

print('gbk: ', utf8_gbk)

# utf8 轉換為 unicode

utf8_unicode = utf8_gbk.decode('gbk') # 注意當轉換為unicode時,並不需要encode()了。

print('unicode: ' utf8_unicode)

# unicode 轉換為 gb18030

unicode_gb18030 = utf8_unicode.encode('gb18030')

print('gb18030: ', unicode_gb18030)

總結各個編碼的相互轉化都要先轉換為unicode然後通過unicode再轉換為想要的編碼例如: utf-8、gb2312、gbk、gb18030 都是bytes字符集。中間橋梁為 unicode。

字串str轉換為bytes使用encode()轉換為位元組碼

bytes轉換為 字串str使用decode()轉換為unicode編碼

Python編碼問題

tag python,encoding,unicode 現有的字元編碼 ascii,gbk,gb2312,utf 8,unicode.unicode可以用來表示所有語言的字元,而且是定長雙位元組 也有四位元組的 編碼,包括英文本母在內。python中定義乙個unicode字串和定義乙個普通字串一樣簡...

python編碼問題

python裡面基本上要考慮三種編碼格式 1 原始檔編碼 在檔案頭部使用coding宣告。告訴python直譯器該 檔案所使用的字符集。usr bin python coding utf8 2 內部編碼 檔案中的字串,經過decode以後,被轉換為統一的unicode格式的內部資料,類似於u uni...

Python編碼問題

python裡面基本上要考慮三種編碼格式 1 原始檔編碼 在檔案頭部使用coding宣告。告訴python直譯器該 檔案所使用的字符集。usr bin python coding utf8 2 內部編碼 檔案中的字串,經過decode以後,被轉換為統一的unicode格式的內部資料,類似於u uni...