昨天一個大學的同學問了一個關於utf-8轉碼gbk的問題,所以兩個人一起討論了一下關於utf-8轉碼成爲GBK的亂碼原因。
正常情況下如果我們需要將UTF-8格式轉碼爲GBK,我們會需要經過這樣一箇中轉:
通常情況下如果直接轉碼會出現一種情況就是GBK轉碼UFT-8出現亂碼後亂碼可以在轉碼回去變爲原來的GBK中文。
但是UTF-8轉碼爲GBK則會出現兩種情況,在中文字符長度爲偶數時是可以直接將亂碼還原回去的,但是奇數情況下是無法全部轉碼回去的
究竟什麼原因呢?
這和UTF-8的編碼字節數和GBK的編碼字節數有關,我們知道UTF-8的字符集是以三個字節數來存儲的,而GBK則是兩個字節數,所以就存在以下問題
當“你好好”三個字轉碼爲字符集表示的時候,一共得到九個字節,當然這九個字節轉碼爲gbk的時候會被兩兩分組,所以第九個字節就會被拋棄無法識別轉化爲有標記的亂碼符號,當我們再把亂碼轉回去的時候,自然就無法還原爲原來的UTF-8了。如下圖
所以在UTF-8轉gbk的基數情況下就會出現最後一個字轉碼爲亂碼後無法還原的情況。