關於字元編碼

2021-08-29 16:37:25 字數 913 閱讀 9178

我們知道在學習php和jsp的時候,出現亂碼是經常性的事情,怎樣來一勞永逸的解決這個問題,我來做個總結。

首先來了解一下字符集,我們關心的字符集大概有這麼幾個,iso-8859-1、gb2312、gbk、utf-8,其中iso-8859-1是採用1個位元組進行編碼,而gb2312和gbk則是在其基礎之上使用雙位元組來對漢字進行編碼,而utf-8使用了3個位元組編碼,因此它容納了幾乎所有字元,包括中國、日本和南韓的表意字元。這也就不難理解為什麼字符集設定錯誤會導致亂碼了。

再來看一下在程式設計的過程中有哪些地方涉及到字符集的設定,本質上只有兩個地方,檔案本身的字符集和瀏覽器解析時使用的字符集,當然資料庫也存在字符集的設定(其實資料庫本質和檔案沒有區別),那怎樣才能避免亂碼呢?我們用保證字符集的一致性,那就是資料庫、檔案、瀏覽器3者使用的字符集是一致的,要麼都是gb2312,要麼都是utf-8,當然iso-8859-1不行,它不支援中文。 資料庫在建庫和建表時可以設定字符集,檔案在儲存的時候可以選擇字符集,那麼瀏覽器的字符集怎麼設定呢,首先瀏覽器由乙個預設字符集,在中文作業系統下一般預設為gb2312,如果不進行設定,它就是解析檔案的字符集;那應該怎麼設定呢,有兩種方法,一種在html中設定,即使用meta標籤,在meta標籤裡面制定content-type就可以了,meta標籤是用來模擬http頭資訊的,另外一種就是在程式語言進行設定,我們可以像http header裡面新增乙個content-type來制定字符集,如php裡面的header()結構.

可是萬一我們不能控制資料庫或某些檔案的編碼了,那應該怎麼處理呢,例如你現在所有的專案都是採用的utf-8(建議都這樣使用),可是資料裡面的資料卻是gb2312,後者某個遠端檔案是使用gb2312編碼,這些是你無法修改的,我們只有在程式中進行修改,如在php裡面提供了iconv函式和mb系列函式進行字元的編碼修改。 總之,一句話,讓專案的所有地方保持編碼一致性,無法控制的部分用字符集轉化函式來改變它。

關於字元編碼

美國人首先對其英文本元進行了編碼,也就是最早的ascii碼,用乙個位元組的低7位來表示英文的128個字元,高1位統一為0 後來歐洲人發現尼瑪你這128位哪夠用,比如我高貴的法國人字母上面的還有注音符,這個怎麼區分,得,把高1位編進來吧,這樣歐洲普遍使用乙個全位元組進行編碼,最多可表示256位。歐美人...

關於iOS字元編碼

剛遇到乙個字元編碼的問題,折騰了一天.檔案是用gb13080編碼的,android下面解析完全沒問題,但是ios下使用以下 nsdata data nsdata datawithcontentsoffile url nsstring s nsstring alloc initwithdata dat...

關於字元及編碼

關於字元及編碼 首先,我們要知道一些概念和標準。字元和位元組是兩個容易混淆的概念,下面我們來看一下它們的含義。字元 人們用來表示某種意義的符號,如 1 a 字 等。位元組 位元組是儲存空間的基本計量單位,由8個二進位制位構成。字串 零個或多個字元組成的有限序列。字符集 字元的集合,由於歷史原因形成了...