posts - 8,  comments - 25,  trackbacks - 0

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

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

          在來看一下在編程的過程中有哪些地方涉及到字符集的設置,本質上只有兩個地方,文件本身的字符集和瀏覽器解析時使用的字符集,當然數據庫也存在字符集的設置(其實數據庫本質和文件沒有區別),那怎樣才能避免亂碼呢?我們要保證字符集的一致性,那就是數據庫、文件、瀏覽器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系列函數進行字符的編碼修改。

          總之,一句話,讓項目的所有地方保持編碼一致性,無法控制的部分用字符集轉化函數來改變它。

          posted on 2008-08-25 22:59 我是風之子 閱讀(2509) 評論(2)  編輯  收藏 所屬分類: 服務器相關

          FeedBack:
          # re: 關于編碼問題
          2008-08-26 20:23 | coca
          utf-8不是固定三個字節的  回復  更多評論
            
          # re: 關于編碼問題
          2008-08-27 10:59 | 我是風之子
          @coca
          恩,是的,謝謝提醒,utf-8是變長字節編碼的  回復  更多評論
            

          <2008年8月>
          272829303112
          3456789
          10111213141516
          17181920212223
          24252627282930
          31123456

          常用鏈接

          留言簿(1)

          隨筆分類

          隨筆檔案

          相冊

          搜索

          •  

          最新評論

          閱讀排行榜

          評論排行榜

          主站蜘蛛池模板: 安阳县| 安西县| 宁南县| 永嘉县| 皋兰县| 鄱阳县| 出国| 咸丰县| 丰原市| 南京市| 乐业县| 怀安县| 景德镇市| 石首市| 宁南县| 韶山市| 泸西县| 荣成市| 乳山市| 芮城县| 固原市| 萨嘎县| 邵阳市| 石楼县| 金塔县| 新乡县| 深水埗区| 嘉义市| 石台县| 怀仁县| 永德县| 灵丘县| 临高县| 黔西| 四川省| 台安县| 义马市| 郑州市| 化州市| 武功县| 永昌县|