Posted on 2006-04-30 10:18
花 閱讀(78)
評論(0) 編輯 收藏
Java 語言默認的編碼方式是UNICODE ,而我們中國人通常使用的文件和數據庫都是基于 GB2312 或者 BIG5 等方式編碼的,怎樣才能夠恰當地選擇漢字編碼方式并正確地處理漢字的編碼呢?本文將從漢字編碼的常識入手,結合 Java 編程實例,分析以上兩個問題并提出解決它們的方案:
1.在JSP程序中加入一條語句:
<%@page contentType="text/html;charset=gb2312" %>
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);