關于使用utf8編碼實現全球化的幾點困惑

          Posted on 2006-04-09 10:25 publisher luo 閱讀(3812) 評論(1)  編輯  收藏 所屬分類: java技術

          ??? 某日一時興起將我們的內容管理發布系統改成uft-8格式(即將所有頁面encode變為utf8,mysql字符集也變成uft-8)來支持能夠建立各種語言的網站(產品現在可以免費下載,網址為:http://sourceforge.net/projects/nodepublisher)。但是在修改程序過程中發現了一個問題,那就是在客戶端頁面提交過來的請求的編碼格式在服務器端無法獲知。如果提交頁面的<head>里面如果包含<meta http-equiv="Content-Type" content="text/html; charset=utf-8">,漢字部分則以utf8編碼提交,如果沒有的話則以gbk編碼提交,而服務器端接受到的request無法判別編碼格式,取到的頭信息只有一些zh類似的說明,所以無法正確的將其轉換成正確的編碼格式。
          另一需要注意的是不能將取到的參數從ISO8859轉換成中文系統默認的字符集GBK,然后再轉換成utf8,這樣的話如果出現奇數漢字的話會導致部分漢字亂碼,原因在于漢字在GBK編碼中為2個byte,而在utf8編碼則為3個byte,如果是偶數個漢字,從ISO8859(tomcat默認得到的request都是ISO8859編碼)轉換成GBK,然后再轉換成ISO8859到還無妨,但是奇數個,最后一個byte不知道會怎么轉換成GBK的,然后再轉回到utf8時最后那個字符就會成為亂碼,我想可能是跟String類里面的拆分char的方法有關,不知道誰有更加明確的分析和解釋。
          再一數據庫方面使用mysql5,設置成utf8初始化數據腳本漢字轉換成uft8,一切正常。后來無意將數據庫轉換成GBK編碼,竟然程序運行也正常,后來經過測試將mysql設置成gbk,然后執行初始化sql腳本,漢字編碼格式為GBK,程序運行依然正常。不明白其中的原由。

          Feedback

          # re: 關于使用utf8編碼實現全球化的幾點困惑  回復  更多評論   

          2006-04-09 13:37 by thinkbase
          mysql的原因, 應該是數據庫jdbc驅動會自己進行編碼的轉換; 至于有些頁面提交的是UTF-8, 有些是GBK, 為什么不把所有頁面都加上"<meta http-equiv="Content-Type" content="text/html; charset=utf-8">"?

          posts - 9, comments - 27, trackbacks - 0, articles - 19

          Copyright © publisher luo

          主站蜘蛛池模板: 准格尔旗| 兴海县| 合作市| 新巴尔虎右旗| 平远县| 桂平市| 延庆县| 临邑县| 兴仁县| 桐城市| 铜陵市| 东方市| 罗平县| 彝良县| 西安市| 丹凤县| 华坪县| 黄冈市| 大邑县| 荔浦县| 乳山市| 长子县| 尼木县| 麻城市| 无为县| 聂拉木县| 贵州省| 丹阳市| 青神县| 昔阳县| 泽普县| 曲沃县| 黄石市| 扶风县| 桐城市| 宜丰县| 岳阳县| 眉山市| 申扎县| 普宁市| 武陟县|