關于使用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

          主站蜘蛛池模板: 郎溪县| 汾西县| 聂荣县| 五河县| 资中县| 永泰县| 长武县| 阿鲁科尔沁旗| 南昌市| 灵武市| 平邑县| 阆中市| 榆林市| 科技| 兰西县| 文登市| 开平市| 永州市| 滕州市| 东源县| 云阳县| 来安县| 抚州市| 黄浦区| 东光县| 定边县| 菏泽市| 乌拉特后旗| 乐东| 武陟县| 崇义县| 晋城| 连平县| 乡宁县| 黄石市| 南投县| 遂川县| 稻城县| 卢龙县| 江山市| 毕节市|