Java Tools

            BlogJava :: 首頁(yè) :: 新隨筆 :: 聯(lián)系 :: 聚合  :: 管理 ::
            83 隨筆 :: 0 文章 :: 16 評(píng)論 :: 0 Trackbacks
          很多開(kāi)源軟件都有國(guó)際化和本地化的問(wèn)題,其實(shí)國(guó)際化本沒(méi)有那么復(fù)雜,只是總有些公司希望通過(guò)拒絕國(guó)際標(biāo)準(zhǔn)來(lái)提高市場(chǎng)占有率,所以也就漸漸導(dǎo)致了現(xiàn)在的情況。很多開(kāi)源軟件首要支持的便是UTF編碼,然后才是其他編碼。(by gashero)當(dāng)然也有些不著調(diào)的軟件首選的是ISO-8859-1編碼,甚至是ASCII編碼。好了,下面先講講編碼,因?yàn)門omcat也是一種不著調(diào)的軟件。

          常見(jiàn)的中文編碼有GB2312、GBK、GB18030等等,當(dāng)然沒(méi)有包括繁體中文,這些編碼都是表示編碼,而并非是顯示編碼。現(xiàn)在越來(lái)越多的軟件,在其核心使用的顯示編碼或者說(shuō)處理編碼,是Unicode編碼。Unicode編碼使用2字節(jié)表示了世界上幾乎所有的文字符號(hào),作軟件的內(nèi)部國(guó)際化處理再適合不過(guò)了。

          只是有些齷齪公司,為了商業(yè)目的,對(duì)內(nèi)核的Unicode編碼API全部屏蔽,對(duì)外只提供本地化編碼。(by gashero)比如M$公司在中文軟件上就主推GBK編碼。

          還有一個(gè)問(wèn)題就是用C/C++編寫的很老的軟件,字符串結(jié)束標(biāo)志是'\0',而使用Unicode的話,會(huì)無(wú)故的截?cái)嘁恍┳址K訳TF-8就應(yīng)運(yùn)而生了,這種變長(zhǎng)編碼既可以減小字符串的體積,也可以防止階段而傳輸U(kuò)nicode編碼。

          至于傳統(tǒng)的英文編碼,最常見(jiàn)的就是兩種。一是ASCII,這種字符集高位為0,用7位表示數(shù)據(jù)。另一種是ISO-8859-1,每個(gè)字符1字節(jié),用8位表示一個(gè)字符。

          Tomcat的內(nèi)置編碼就是使用了ISO-8859-1。這也是本文最關(guān)鍵的一句,各種技巧的根本。

          由此可知由網(wǎng)頁(yè)所提交的數(shù)據(jù)就需要從ISO-8859-1解碼,如下是獲得提交參數(shù)number的例子。

          String number=new String(request.getParameter("number").getBytes("ISO-8859-1"),"UTF-8");

          這句就成功的實(shí)現(xiàn)了從ISO-8859-1向UTF-8編碼的轉(zhuǎn)換。
          有經(jīng)驗(yàn)的讀者應(yīng)該遇到過(guò)通過(guò)<jsp:param>標(biāo)簽傳遞網(wǎng)頁(yè)間參數(shù)時(shí)出錯(cuò)的問(wèn)題。(by gashero)接收到的字符串只要是無(wú)論如何都是一堆問(wèn)號(hào)。其實(shí)這也是Tomcat內(nèi)部編碼所導(dǎo)致的。如果可以順應(yīng)Tomcat的內(nèi)部編碼就可以傳遞中文字符串了。

          比如一個(gè)頁(yè)面間的內(nèi)部重定向:

          <jsp:forward page="index.jsp">
              <jsp:param name="name" value="<%=new String("中文參數(shù)".getBytes("UTF-8"),"ISO-8859-1") %>" />
          </jsp:forward>

          而在目的頁(yè)面接收參數(shù)的時(shí)候也需要再次從ISO-8859-1編碼轉(zhuǎn)換到UTF-8編碼。這樣就實(shí)現(xiàn)了在頁(yè)面之間傳遞中文參數(shù)。
          posted on 2007-07-21 13:50 和田雨 閱讀(257) 評(píng)論(0)  編輯  收藏 所屬分類: Tomcat
          主站蜘蛛池模板: 大城县| 朝阳区| 肃南| 芮城县| 嵊泗县| 中西区| 洪泽县| 日照市| 巧家县| 得荣县| 邻水| 赫章县| 吴川市| 崇明县| 天台县| 延边| 泽库县| 龙山县| 沛县| 雅安市| 尚志市| 杂多县| 湖北省| 鄂托克旗| 施秉县| 蓬莱市| 亚东县| 安徽省| 贡觉县| 东港市| 宜阳县| 天峻县| 安新县| 来安县| 商水县| 青州市| 曲阜市| 泰安市| 望江县| 博客| 高陵县|