JAVA編碼問題的一些理解(轉)
JAVA編碼問題的一些理解(轉)[@more@]Java 語言預設的編碼方式是UNICODE ,而我們中國人通常使用的檔案和資料庫都是基於 GB2312 或者 BIG5 等方式編碼的,怎樣才能夠恰當地選擇漢字編碼方式並正確地處理漢字的編碼呢?本文將從漢字編碼的常識入手,結合 Java 程式設計例項,分析以上兩個問題並提出解決它們的方案:
1.在JSP程式中加入一條語句:
2.在URL請示字串的編碼問題。
如果透過GET/POST方法從客戶端傳遞過來的資訊中包含漢字資訊,SERVLET/JSP無法得到正確的值。
我們在呼叫request.getParameter("param_name")前指定應用程式所希望的編碼方式。
也就是request.setCharacterEcoding()即可
3.在不同的平臺編碼的問題是不同的。
在linux平臺上的標準是Iso8859_1,而在win2k下是GBK的,這些是預設的標準,如果你的伺服器不是這樣的,那麼編譯的問題一定會有問題。本人就遇到這樣的問題,兩臺LINUX伺服器,一臺lang=en,一臺lang=en,UTF8,被我搞了N長時間才找到原因。
3.我本人用的最多的轉換編碼的一個類(在linux平臺),幾乎可以解決所有的編碼問題。類的方法非常解決。主要就是asc2gb()和gb2asc()這兩個類。
package com.whaic.tools;
import java.io.UnsupportedEncodingException;
public class ECov
{
public static String asc2gb(String asc){
String ret;
if(asc==null)return asc;
try{
ret=new String(asc.getBytes("ISO8859_1"),"GB2312");
}
catch(UnsupportedEncodingException e){
ret=asc;
}
return ret;
}
public static String gb2asc(String gb){
String ret;
if(gb==null)return gb;
try{
ret=new String(gb.getBytes("GB2312"),"ISO8859_1");
}
catch(UnsupportedEncodingException e){
ret=gb;
}
return ret;
}
}
4.讀寫檔案時的中文問題:
Read::
FileInputStream fis = new FileInputStream(strInFile);
InputStreamReader isr = new InputStreamReader(fis, "GB2312");
Reader in = new BufferedReader(isr);
int ch;
while ((ch = in.read()) > -1) {
iCharNum += 1;
buffer.append((char)ch);
}
in.close();
Write::
FileOutputStream fos = new FileOutputStream(strOutFile);
Writer out = new OutputStreamWriter(fos, "Big5");
out.write(str);
out.close();
以上僅僅是本人是日常使用中遇到的一些問題和解決方案。由於國際化的工作並不是在國內完成的,所以在這些基本類釋出之前,沒有經過嚴格的測試,所以對中文字元的支援並不像 Java Soft 所聲稱的那樣完美。Java 程式語言成長於網路世界,這就要求 Java 對多國字元有很好的支援。 Java 程式語言適應了計算的網路化的需求,為它能夠在網路世界迅速成長奠定了堅實的基礎。 Java 的締造者 (Java Soft) 已經考慮到 Java 程式語言對多國字元的支援,只是現在的解決方案有很多缺陷在裡面,需要我們付諸一些補償性的措施。而世界標準化組織也在努力把人類所有的文字統一在一種編碼之中,其中一種方案是 ISO10646 ,它用四個位元組來表示一個字元。當然,在這種方案未被採用之前,還是希望 Java Soft 能夠嚴格地測試它的產品,為使用者帶來更多的方便。
1.在JSP程式中加入一條語句:
2.在URL請示字串的編碼問題。
如果透過GET/POST方法從客戶端傳遞過來的資訊中包含漢字資訊,SERVLET/JSP無法得到正確的值。
我們在呼叫request.getParameter("param_name")前指定應用程式所希望的編碼方式。
也就是request.setCharacterEcoding()即可
3.在不同的平臺編碼的問題是不同的。
在linux平臺上的標準是Iso8859_1,而在win2k下是GBK的,這些是預設的標準,如果你的伺服器不是這樣的,那麼編譯的問題一定會有問題。本人就遇到這樣的問題,兩臺LINUX伺服器,一臺lang=en,一臺lang=en,UTF8,被我搞了N長時間才找到原因。
3.我本人用的最多的轉換編碼的一個類(在linux平臺),幾乎可以解決所有的編碼問題。類的方法非常解決。主要就是asc2gb()和gb2asc()這兩個類。
package com.whaic.tools;
import java.io.UnsupportedEncodingException;
public class ECov
{
public static String asc2gb(String asc){
String ret;
if(asc==null)return asc;
try{
ret=new String(asc.getBytes("ISO8859_1"),"GB2312");
}
catch(UnsupportedEncodingException e){
ret=asc;
}
return ret;
}
public static String gb2asc(String gb){
String ret;
if(gb==null)return gb;
try{
ret=new String(gb.getBytes("GB2312"),"ISO8859_1");
}
catch(UnsupportedEncodingException e){
ret=gb;
}
return ret;
}
}
4.讀寫檔案時的中文問題:
Read::
FileInputStream fis = new FileInputStream(strInFile);
InputStreamReader isr = new InputStreamReader(fis, "GB2312");
Reader in = new BufferedReader(isr);
int ch;
while ((ch = in.read()) > -1) {
iCharNum += 1;
buffer.append((char)ch);
}
in.close();
Write::
FileOutputStream fos = new FileOutputStream(strOutFile);
Writer out = new OutputStreamWriter(fos, "Big5");
out.write(str);
out.close();
以上僅僅是本人是日常使用中遇到的一些問題和解決方案。由於國際化的工作並不是在國內完成的,所以在這些基本類釋出之前,沒有經過嚴格的測試,所以對中文字元的支援並不像 Java Soft 所聲稱的那樣完美。Java 程式語言成長於網路世界,這就要求 Java 對多國字元有很好的支援。 Java 程式語言適應了計算的網路化的需求,為它能夠在網路世界迅速成長奠定了堅實的基礎。 Java 的締造者 (Java Soft) 已經考慮到 Java 程式語言對多國字元的支援,只是現在的解決方案有很多缺陷在裡面,需要我們付諸一些補償性的措施。而世界標準化組織也在努力把人類所有的文字統一在一種編碼之中,其中一種方案是 ISO10646 ,它用四個位元組來表示一個字元。當然,在這種方案未被採用之前,還是希望 Java Soft 能夠嚴格地測試它的產品,為使用者帶來更多的方便。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/10617731/viewspace-961884/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- JAVA的中文編碼問題Java
- JAVA的一些基本問題(轉)Java
- 在你編碼之前需要分析的一些問題
- Python 字元編碼問題和其他一些問題Python字元
- 轉python編碼問題Python
- 關於Java編碼規範的問題Java
- Java編碼易疏忽的十個問題Java
- 關於JS的編碼轉換問題JS
- 深入分析 Java 中的中文編碼問題Java
- Java 中的中文編碼問題深入分析Java
- 編譯Spring原始碼的步驟及一些問題編譯Spring原始碼
- 深入分析 Java Web 中的中文編碼問題JavaWeb
- 【字元編碼】Java字元編碼詳細解答及問題探討字元Java
- 包含中文字元的URL編碼問題(轉)字元
- scheme跳轉特殊字元編碼問題Scheme字元
- jsp的編碼問題JS
- php編碼問題PHP
- 字元編碼問題字元
- 有關java的unicode編碼的問題,大家幫忙JavaUnicode
- Java程式碼規範和一些常見問題Java
- 關於C++&Java中命令列編譯的問題 (轉)C++Java命令列編譯
- gcc編譯引數-fPIC的一些問題GC編譯
- 【Java】程式設計過程中遇到的中文編碼問題Java程式設計
- Java 程式編碼的規範(轉)Java
- 記錄一些工程編譯問題編譯
- PHP 與 JS 的編碼問題PHPJS
- Python的中文編碼問題Python
- java字元編碼轉換Java字元
- Java 編碼規範 (轉)Java
- java編碼規範 (轉)Java
- JDBC的XML編碼和Delphi融合時的編碼問題JDBCXML
- 關於Java NIO的一些問題,求助。Java
- java轉型問題Java
- 配置pycharm 編譯器時遇到的一些問題PyCharm編譯
- maven的編碼問題、解決和疑問Maven
- 對synchronized(this)的一些理解(轉)synchronized
- 一些防止java程式碼被反編譯的方法Java編譯
- Ubuntu中 MySQL 的中文編碼問題UbuntuMySql