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

          Feedback

          # re: 關(guān)于使用utf8編碼實(shí)現(xiàn)全球化的幾點(diǎn)困惑  回復(fù)  更多評(píng)論   

          2006-04-09 13:37 by thinkbase
          mysql的原因, 應(yīng)該是數(shù)據(jù)庫jdbc驅(qū)動(dòng)會(huì)自己進(jìn)行編碼的轉(zhuǎn)換; 至于有些頁面提交的是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

          主站蜘蛛池模板: 扎赉特旗| 藁城市| 行唐县| 陕西省| 阜南县| 克东县| 通江县| 长垣县| 桦川县| 井陉县| 黄龙县| 凤山县| 辛集市| 云南省| 通海县| 苍南县| 通山县| 禄丰县| 贺兰县| 商都县| 安远县| 玉门市| 靖州| 阿巴嘎旗| 泊头市| 宁海县| 佛教| 井陉县| 铜梁县| 广州市| 四会市| 新平| 那曲县| 肃宁县| 滨州市| 江都市| 宾川县| 克拉玛依市| 衡东县| 石城县| 宁阳县|