題幹爲:有以下字符串:n = "齊天大聖"。編碼
要求:(1)將字符串轉換成utf-8的字符編碼的字節,再將轉換的字節從新轉換爲utf-8的字符編碼的字符串spa
(2)將字符串轉換成utf-8的字符編碼的字節,再將轉換的字節從新轉換爲gbk的字符編碼的字符串code
(1)對於第一個問題,將字符串編碼爲utf-8編碼的字節,而後再轉爲utf-8,這裏能夠直接進行encode與decode的操做:blog
這裏咱們給n賦值爲'齊天大聖',將n的值以utf-8的方式編碼獲得的結果賦值給n2,而一樣以utf-8的方式解碼獲得的結果仍然是'齊天大聖',也就是說此時的n3與n相等。utf-8
(2)可是對於以utf-8方式編碼,而又以gbk方式解碼,對於不少初學者來講可能會犯下面這樣的錯誤,不少人可能按照字面的意思會這樣寫:字符串
n = '齊天大聖' n2 = n.encode('utf-8') n3 = n2.decode('gbk') print('編碼:%s\n解碼:%s\n' % (n2,n3))
可是,輸出的結果倒是這樣子的:字符編碼
解碼的結果居然出現了亂碼!!!class
這裏須要着重強調一下,當咱們將字符串先以utf-8的編碼形式寫進計算機的硬盤上時,也就至關於給這個字符串上了一把「鎖」,而打開這把「鎖」的「鑰匙」是在你「上鎖」的時候就惟一肯定了的。也就是說,當你用utf-8的編碼模式encode的時候,decode的話必須以一樣的編碼方式進行,而上圖中咱們先以utf-8的模式對字符串「上鎖」,而gbk方式不是合適的「鑰匙」,當你用這個「不合適的鑰匙」解鎖的時候,計算機不知道你究竟要decode什麼,因此固然會出現亂碼。亂碼
問題(2)正確的解決方式須要咱們先將用utf-8模式編碼好的字符串以utf-8的模式decode出來,再進行gbk模式的編解碼操做:im
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' % (n2,n5))