常见乱码产生原因以及锟斤拷的产生过程
生活随笔
收集整理的這篇文章主要介紹了
常见乱码产生原因以及锟斤拷的产生过程
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
文章目錄
- 常見亂碼產生原因
- 方塊碼的產生原因
- 代碼測試
- 控制臺打印以下信息
- 編碼原理
- 錕拷碼的產生原因
- 代碼測試
- 控制臺打印以下信息
- 編碼原理
常見亂碼產生原因
| 古文碼 | 浜屽紶涓夋潕鍥旇檔鍏 | 大多為不認識的古文,夾雜日韓文 | 以GBK方式讀取UTF-8編碼的中文 |
| 方塊碼 | ������� | 大部分字符為方塊問號 | 以UTF-8方式讀取GBK編碼的中文 |
| 符號碼 | ????????oèμμ-è?? | 大部分字符為各種符號 | 以ISO8859-1方式讀取UTF-8編碼的中文 |
| 拼音碼 | ??èyà???í?????á | 大部分字符為帶著聲調的字母 | 以ISO8859-1方式讀取GBK編碼的中文 |
| 問句碼 | 寮犱笁鏉庡洓鐜嬩簲叚鑰? | 基本和古文碼一致,字符串為偶數時正常,長度為奇數時結尾會帶上問號 | 以GBK方式讀取UTF-8編碼的中文,然后又用GBK的格式再次讀取 |
| 錕拷碼 | 錕斤拷錕斤拷錕斤拷 | 基本都是錕斤拷三個字符 | 以GBK方式讀取UTF-8編碼的�� |
方塊碼的產生原因
下面我們來看一下方塊碼具體是怎么來的
首先需要知道方塊碼‘�’的產生原因,由上圖可知,方塊碼是以UTF-8方式讀取GBK編碼的中文,而UTF-8和GBK編碼的區別在于:
- UTF-8會將中文轉化成三個字節進行存儲
- GBK會將中文轉化成兩個字節進行存儲
代碼測試
public class TestCode {public static void main(String[] args) {test_UTF8_GBK();}//UTF8_GBKstatic void test_UTF8_GBK(){try {byte[] GBKbyte = "張三".getBytes("GBK");System.out.print("張三的GBK編碼:");for (byte b : GBKbyte) {System.out.print(b + " ");}String UTF8_GBKbyte = new String(GBKbyte, "UTF-8");System.out.println("\nUTF-8讀取GBK編碼:"+UTF8_GBKbyte);} catch (UnsupportedEncodingException e) {e.printStackTrace();}}}控制臺打印以下信息
張三的GBK編碼:-43 -59 -56 -3
UTF-8讀取GBK編碼:����
編碼原理
"張三"在GBK中實際以-43 -59 -56 -3 進行存儲,再由UTF-8讀取時,由于這些碼在UTF-8庫中無法匹配
UTF-8字符集也有一個專門用于提示用戶字符無法識別或展示的替換符號:也就是‘�’
因此,我們會看到,使用UTF-8讀取GBK編碼的中文時就會產生方塊碼
錕拷碼的產生原因
由上表可知,錕拷碼是由于以GBK方式讀取UTF-8編碼的��得到,而如果產生了方塊碼,就有可能會產生錕拷碼
代碼測試
public class TestCode {public static void main(String[] args) {test_GBK_UTF8byte();}static void test_GBK_UTF8byte() {try {byte[] UTF8byte = "����".getBytes("UTF-8");for (byte b : UTF8byte) {System.out.print(" " + b);}String GBK_UTF8byte = new String(UTF8byte, "GBK");System.out.println("\n" + GBK_UTF8byte);} catch (UnsupportedEncodingException e) {e.printStackTrace();}}}控制臺打印以下信息
-17 -65 -67 -17 -65 -67 -17 -65 -67 -17 -65 -67
錕斤拷錕斤拷
����首先被轉化成了12個字節,按照-17 -65 -67的順序排列,因此,當使用GBK讀取時,會兩個兩個進行解析,-17 -65 解析成錕,-67 -17 解析成斤,-65 -67解析成拷
編碼原理
由于�在UTF-8編碼中會被編碼成-17 -65 -67三個字節,而兩個方塊碼會產生6個字節,正好滿足GBK編碼中取兩個字節進行解碼
- -17 -65 對應 “錕”
- -67 -17 對應 “斤”
- -65 -67 對應 “拷”
因此當我們使用GBK來讀取UTF-8編碼的方塊碼時,原來的兩個方塊碼“��”就會被GBK讀取成了“錕斤拷”,如下表所示
| � | -17 -65 -67 | |
| �� | -17 -65 -67 -17 -65 -67 | |
| 錕 | -17 -65 | |
| 斤 | -67 -17 | |
| 拷 | -65 -67 |
總結
以上是生活随笔為你收集整理的常见乱码产生原因以及锟斤拷的产生过程的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: dream_c梦想标准化语言评估,孩子语
- 下一篇: 百度、微博的大数据算法Top10热搜怎么