經常聽別人說編碼方式不一致是導致亂碼產生的原因。這是標準答案,但不一定是你想要的答案,因為不理解啊!那就說的再明白一點。
你知道乙個中文字元在網路上是怎麼傳輸的嗎?比如「中國」這兩個字,猜一下也知道在傳輸過程中肯定不是「中國」這樣的字元,而是位元組,也就是0|1這樣的二進位制數。
你需要把「中國」通過某種編碼方式轉換成二進位制數進行傳輸,而接收方在收到二進位制數之後再根據相應的編碼方式解碼成「中國」。問題就出在雙方使用的編碼方式是否一致上面。
編碼方式是什麼東西?聽說過字符集吧?常見的字符集有utf-8,gbk,gb2312,iso8859-1之類的。每種字符集都會在它所包含的字元和位元組之間建立對映關係。而乙個位元組就是8個二進位制位。所以你也可以把字符集看成是字元和二進位制數進行轉換的公式或對映表。
「中國」用gbk轉成二進位制數是11010110110100001011100111111010(在gbk中每個中文字元對應兩個位元組,每個位元組對應8位二進位制數,因此這串數字應該是32位,對應「中國」這兩個中文字元,不信你可以數數,呵呵。),再把這一串二進位制數用utf-8轉換成字元試試,肯定不是原來的「中國」了(因為在utf-8字符集中,乙個字元對應三個位元組,所以用腳趾頭都能猜到肯定找不回「中國」了)。這就是我所理解的中文亂碼產生的原因。
亂碼產生的原因
亂碼產生的原因一般有兩種 一種是解析錯誤 另一種是在錯誤解析的基礎上加上了編碼轉換。比如乙個gb2312編碼的檔案,使用utf 8來開啟,就會出現亂碼。在現實中,我們可能並不知道傳送方和接收方的編碼。所以應該以程式的方式進行如上的反向解析,如下 public static void main str...
中文亂碼問題產生的由來
中文亂碼問題產生的由來 在計算機中,只有二進位制的資料,不管資料是在記憶體中,還是在外部裝置上。對於我們所看到的字元,也是以二進位制資料的形式存在的。不同的字元對應的 二進位制數的規則,就是字元的編碼。字元編碼的集合稱為字符集。常用的字符集 1 ascii 2 iso8859 1 3 gb2312和...
MySQL PHP產生亂碼的原因及解決方法
mysql php產生亂碼原因 mysql資料庫預設的編碼是utf8,如果這種編碼與你的php網頁不一致,可能就會造成mysql亂碼 mysql中建立表時會讓你選擇一種編碼,如果這種編碼與你的網頁編碼不一致,也可能造成mysql亂碼 mysql建立表時新增欄位是可以選擇編碼的,如果這種編碼與你的網頁...