python3編碼問題個人理解

2022-03-26 13:55:42 字數 1103 閱讀 7114

#coding=utf-8

a = "你" # 這個字串是unicode和 a = u「你」等價

b = b'\\u4f60' #這個表示b是位元組串(如果需要顯示b的值則 print(b.decode("unicode-escape")) )系統會返回「你」這個值是因為它根據utf-8來給你解碼

print(a.encode("unicode-escape")) #這個表示a這個字串編碼成unicode的位元組串 返回值為b'\\u4f60'

print('\u4f60') #等價於 print(a) 等價於 print('你'),系統實際打出時會進行以下操作

print('\u4f60'.encode("utf-8").decode("utf-8"))

#python預設使用utf-8編碼,將unicode的字元轉化為utf-8格式,然後在檢視codepage表對應的值,顯示出「你」這個字串

以下是搞了很久腦子的問題。

print(b'\u4f60'.decode("unicode-escape")) #返回「你」,這裡b'\u4f60'是unicode的位元組串,所以需要解碼成unicode字元

print('\u4f60'.encode("utf-8").decode("utf-8")) #返回「你」 此處「\u4f60」和「你」等價,將將unicode編碼成utf-8格式,然後根據codepage表解碼成「你」

以下因為鑽牛角尖了,所以把自己搞混亂了,想通後整理內容如下。

「你」的unicode位元組串是b'\\u4f60'

「你」的utf-8的位元組串是b'\xe4\xbd\xa0'

由於python3是字串都是unicode格式,預設編碼格式是utf-8

所以print('\u4f60')會預設將它當成unicode格式來解碼成utf-8的字串來顯示。

所以個人理解是print('\u4f60')列印給使用者檢視的返回值計算機做的操作是print('\u4f60'.encode("utf-8").decode("utf-8"))

而print('\xe4\xbd\xa0')列印亂碼是因為在unicode的codepage表中代表的就是亂碼(除非python把字串都變成utf-8格式,那麼就能正常顯示「你」)

Python3編碼問題

python3最重要的進步之一就是解決了python2中字串與字元編碼的問題。python2字串的缺陷如下 而python3則把系統預設編碼設定為了 utf 8 import sys sys.getdefaultencoding utf 8 之後,文字字元和二進位制資料分別用str和bytes表示。...

python3編碼問題

編碼問題 在python3中只有兩種資料型別 1 str 編碼形式是unicode,unicode任一字元編碼都存在 2 bytes 編碼形式是十六進製制 編碼encoding utf,gbk都只是一種編碼規則,按照各自的規則進行編碼,可以存在多種編碼規則 s hello中國 在記憶體中是以unic...

python3 編碼問題

asci 碼 8 位unicode 至少兩個位元組 utf 8 為了傳輸而設計的編碼方式 用於網路傳輸 或者儲存 python2 使用ascii編碼,不支援中文 python3 使用utf 8 編碼.文字字元和二進位制資料區分得更清晰,分別用 str 和bytes 表示。文字字元全部用 str 型別...