JSP技巧:從原理上解決Tomcat中文問題

來源:互聯網
上載者:User
js|技巧|解決|問題|中文

  很多開源軟體都有國際化和本地化的問題,其實國際化本沒有那麼複雜,只是總有些公司希望通過拒絕國際標準來提高市場佔有率,所以也就漸漸導致了現在的情況。很多開源軟體首要支援的便是UTF編碼,然後才是其他編碼。(by gashero)當然也有些不著調的軟體首選的是ISO-8859-1編碼,甚至是ASCII編碼。好了,下面先講講編碼,因為Tomcat也是一種不著調的軟體。

  常見的中文編碼有GB2312、GBK、GB18030等等,當然沒有包括繁體中文,這些編碼都是表示編碼,而並非是顯示編碼。現在越來越多的軟體,在其核心使用的顯示編碼或者說處理編碼,是Unicode編碼。Unicode編碼使用2位元組表示了世界上幾乎所有的文字元號,作軟體的內部國際化處理再適合不過了。

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

  還有一個問題就是用C/C++編寫的很老的軟體,字串結束標誌是'\0',而使用Unicode的話,會無故的截斷一些字串。所以UTF-8就應運而生了,這種變長編碼既可以減小字串的體積,也可以防止階段而傳輸Unicode編碼。

  至於傳統的英文編碼,最常見的就是兩種。一是ASCII,這種字元集高位為0,用7位表示資料。另一種是ISO-8859-1,每個字元1位元組,用8位表示一個字元。

  Tomcat的內建編碼就是使用了ISO-8859-1。這也是本文最關鍵的一句,各種技巧的根本。

  由此可知由網頁所提交的資料就需要從ISO-8859-1解碼,如下是獲得提交參數number的例子。

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

  這句就成功的實現了從ISO-8859-1向UTF-8編碼的轉換。

  有經驗的讀者應該遇到過通過<jsp:param>標籤傳遞網頁間參數時出錯的問題。(by gashero)接收到的字串只要是無論如何都是一堆問號。其實這也是Tomcat內部編碼所導致的。如果可以順應Tomcat的內部編碼就可以傳遞中文字串了。

  比如一個頁面間的內部重新導向:

  <?xml:namespace prefix = jsp /><jsp:forward page="index.jsp">

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

  </jsp:forward>

  而在目的頁面接收參數的時候也需要再次從ISO-8859-1編碼轉換到UTF-8編碼。這樣就實現了在頁面之間傳遞中文參數。



相關文章

Beyond APAC's No.1 Cloud

19.6% IaaS Market Share in Asia Pacific - Gartner IT Service report, 2018

Learn more >

Apsara Conference 2019

The Rise of Data Intelligence, September 25th - 27th, Hangzhou, China

Learn more >

Alibaba Cloud Free Trial

Learn and experience the power of Alibaba Cloud with a free trial worth $300-1200 USD

Learn more >

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。