字元編碼問題

2022-04-29 02:36:05 字數 1437 閱讀 2140

題幹為:有如下字串:n = "齊天大聖"。

要求:(1)將字串轉換成utf-8的字元編碼的位元組,再將轉換的位元組重新轉換為utf-8的字元編碼的字串

(2)將字串轉換成utf-8的字元編碼的位元組,再將轉換的位元組重新轉換為gbk的字元編碼的字串

(1)對於第乙個問題,將字串編碼為utf-8編碼的位元組,然後再轉為utf-8,這裡可以直接進行encode與decode的操作:

這裡我們給n賦值為'齊天大聖',將n的值以utf-8的方式編碼得到的結果賦值給n2,而同樣以utf-8的方式解碼得到的結果仍然是'齊天大聖',也就是說此時的n3與n相等。

(2)但是對於以utf-8方式編碼,而又以gbk方式解碼,對於很多初學者來說可能會犯下面這樣的錯誤,很多人可能按照字面的意思會這樣寫:

n = '

齊天大聖

'n2 = n.encode('

utf-8')

n3 = n2.decode('

gbk'

)print('

編碼:%s\n解碼:%s\n

' % (n2,n3))

但是,輸出的結果卻是這樣子的:

解碼的結果竟然出現了亂碼!!!

這裡需要著重強調一下,當我們將字串先以utf-8的編碼形式寫進計算機的硬碟上時,也就相當於給這個字串上了一把「鎖」,而開啟這把「鎖」的「鑰匙」是在你「上鎖」的時候就唯一確定了的。

也就是說,當你用utf-8的編碼模式encode的時候,decode的話必須以同樣的編碼方式進行,而上圖中我們先以utf-8的模式對字串「上鎖」,而gbk方式不是合適的「鑰匙」,當你用這個「不合適的鑰

匙」解鎖的時候,計算機不知道你究竟要decode什麼,所以當然會出現亂碼。

問題(2)正確的解決方式需要我們先將用utf-8模式編碼好的字串以utf-8的模式decode出來,再進行gbk模式的編譯碼操作:

n = '

齊天大聖

'n2 = n.encode('

utf-8')

n3 = n2.decode('

utf-8')

n4 = n3.encode('

gbk'

)n5 = n4.decode('

gbk'

)print('

utf-8編碼位元組為:%s\ngbk解碼字串為:%s

字元編碼問題

字元編碼主要分兩種 mbcs以及 unicode。以 c cc 為例,以 char 為單位的陣列使用mbcs編碼 如 ascii,gb2312,big5 以wchar t 為單位的陣列使用unicode作為編碼。比如你的程式中使用 char sztitle 窗體標題 此時,sztitle字串使用的的...

字元編碼問題

utf 8 1.單位元組的字元,位元組的第一位設為0,對於英語文字,utf 8碼只占用乙個位元組,和ascii碼完全相同 2.n個位元組的字元 n 1 第乙個位元組的前n位設為1,第n 1位設為0,後面位元組的前兩位都設為10,這n個位元組的其餘空位填充該字元unicode碼,高位用0補足。除了格式...

字元編碼問題

關鍵字 編碼集 bstr lpstr lpcstr lpwstr lpcwstr lptstr lpctstr cstring 1 編碼集 1 ascii編碼集 單位元組00h 7fh範圍 最高位為0 2 擴充套件ascii編碼 單位元組80h ffh範圍 最高位為1 3 gb2312 採用兩個位元...