??? 某日一時興起將我們的內容管理發布系統改成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,程序運行依然正常。不明白其中的原由。
posts - 9, comments - 27, trackbacks - 0, articles - 19
Copyright © publisher luo