熱點推薦:
您现在的位置: 電腦知識網 >> 編程 >> Java編程 >> JSP教程 >> 正文

Java多語言編碼問題解析(1)

2022-06-13   來源: JSP教程 

  Java編譯器在對源文件編譯前會先把源文件轉換為unicode編碼因為這個原因我們在編譯時一定要把源文件用的是什麼編碼方式正確無誤的告訴編譯器
  
  例如我們的源文件是以UTF的方式保存的而在編譯時編譯器卻把它當作是用GBK方式保存的這樣編譯器就會按照GBK>Unicode的編碼轉換方法對源文件進行轉換然後再編譯這樣當然會出錯實際上編譯器應當按照UTF>Unicode的編碼轉換方法來對源文件進行轉換
  
  a.對於控制台程序編譯器會把源文件看作是由系統默認的編碼類型來編碼的(系統默認的編碼類型取決於在控制面板區域設置裡的配置中文wink下通常是GBK)也可以使用encoding參數來設置javac encoding UTF這樣編譯器就會把源文件看作是用UTF編碼的(這只是告訴編譯器源文件的編碼類型而不是對源文件轉碼)在各種語言的平台上只要在編譯用時encoding指定與源文件的編碼相同的編碼方式就不會存在國際化的問題了
  
  b.對於JSP編譯器則會根據設定的字符集來判斷JSP文件使用的是什麼編碼方式進而將其轉換成unicode後進行編譯若JSP中未指定編譯器則會把JSP文件看作是按照系統默認的編碼來保存的在JSP裡新增了一個指令來通知編譯器這個源文件所使用的編碼方式
  
  在處理輸入輸出時注意設置輸入流和輸出流的編碼類型與用戶輸入時和輸出設備顯示時采用的編碼方式一致
  
  由於JRE在處理輸入輸出時會將輸入或輸出的內容進行編碼轉換對於輸入會轉換為unicode後再送入因此要正確的匹配實際輸入內容的編碼方式和告知JRE的編碼方式對於輸出會由unicode轉換為其他的編碼再送出程序因此要正確匹配輸出設備顯示時用的編碼方式和告知JRE的編碼方式
  
  例如程序中設置輸入流的編碼是new InputStreamReader(SysteminGB)而程序運行後用戶輸入時用了繁體中文的輸入法輸入了BIG編碼的內容這樣JRE把BIG編碼的內容當作GB的進行了GB>unicode的編碼轉換這樣轉換後的結果顯然不是用戶想要輸入的內容了
  
  默認情況下JRE會把輸入輸出的內容當作是按照系統默認編碼方式編碼的
  
  在Servlet中除了一定要把源文件用的是什麼編碼方式正確無誤的告訴編譯器外還要注意實際提交的URL數據表單數據的編碼格式和request中聲明的編碼格式一致
  
  客戶端浏覽器在通過表單和URL提交數據時容器和JVM會將request中的數據看作是按照request所聲明的編碼方式來編碼的將數據由這種編碼方式轉換為unicode後再送入servlet(實際上容器會先將request中的數據轉為一種中間編碼方式具體根據容器的配置而定再由JVM由這種中間方式轉換為unicode通常這種中間格式是ISO)servlet輸出的unicode數據會由容器根據response中聲明的編碼方式進行轉換再送到客戶端浏覽器上
  
  在接收客戶端輸入時用requestsetCharacterEncoding()聲明請求中數據的編碼方式
  
  在向客戶端輸出時用responsesetContentType(text/html;charset=)聲明響應的數據的編碼方式告知浏覽器以哪種編碼方式顯示
  
  在JSP中由於JSP本就會被JSP編譯器編譯為servlet來運行因此情況與servlet相同
  
  這兩個JSP指令聲明了請求和響應的編碼方式
  
  只要確保URL參數或表單中數據的編碼方式和所聲明的編碼方式一致再通過告知JSP編譯器本JSP文件采用的編碼方式及含有哪種字符即可解決JSP的字符編碼問題

From:http://tw.wingwit.com/Article/program/Java/JSP/201311/19279.html
    推薦文章
    Copyright © 2005-2022 電腦知識網 Computer Knowledge   All rights reserved.