歡迎您光臨本站 註冊首頁

JAVA編碼問題的一些理解

←手機掃碼閱讀     火星人 @ 2014-03-26 , reply:0

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 能夠嚴格地測試它的產品,為用戶帶來更多的方便。

[火星人 ] JAVA編碼問題的一些理解已經有350次圍觀

http://coctec.com/docs/linux/show-post-189299.html