問
:
當用
JDBC
向數據庫中插入數據或從數據庫中提取數據時
,
為何有時中文字符會顯示為亂碼
?
答
:
這個問題的實現通常與各個
JDBC driver
的實現有關
.
目前大多數
JDBC driver
采用本地編碼格式來傳輸中文字符
,
例如中文字符
"0x4175"
會被轉成
"0x41"
和
"0x75"
進行傳輸
.
因此我們需要對
JDBC driver
返回的字符以及要發(fā)給
JDBC driver
的字符進行轉換
.
當用
JDBC driver
向數據庫中插入數據時
,
需要先將
Unicode
轉成
native code;
當
JDBC driver
從數據庫中查詢數據時
,
則需要將
native code
轉換成
Unicode.
下面給出了這兩種轉換的實現
:
String native2Unicode(String s) {
if (s == null || s.length() == 0) {
return null;
}
byte[] buffer = new byte[s.length()];
for (int i = 0; i s.length(); i++) { if (s.charAt(i)>= 0x100) {
c = s.charAt(i);
byte []buf = (""+c).getBytes();
buffer[j++] = (char)buf[0];
buffer[j++] = (char)buf[1];
}
else {
buffer[j++] = s.charAt(i);
}
}
return new String(buffer, 0, j);
}
除使用以上兩個方法之外
,
有些
JDBC driver
如果對
jdbc driver Manager
設置了正確
的字符集屬性
,
以上
2
個方法就不需要了
.
問
:
當用
Servlet
來處理
http
請求并產生返回的
HTML
頁面時
,
如何使
HTML
頁面中的中文字符能夠正常顯示
?
答
:
javax.servlet.http.HttpResponse
類用于產生返回頁面
.
通過
HttpResponse
定義的方法
getOutputStream()
可以獲得
ServletOutputStream
的實例
,
這樣用戶就可以利用
ServletOutputStream.write
方法向輸出流中寫入返回頁面的內容
.
但是
ServletOutputStream
使用的是缺省的編碼方式
,
如果要使返回頁面中的中文字
符能夠正常顯示
,
最好顯示地指定所用的字符編碼方式
.
通常需要構造一個
OutputStreamWriter ,
例程如下
:
public void doGet (HttpServletRequest req, HttpServletResponse res)
throws ServletException, IOException
{
res.setContentType("text/html");
ServletOutputStream out = res.getOutputStream();
OutputStreamWriter ow = new OutputStreamWriter(out,"GB2312");
ow.write("
這是測試
");
ow.flush();
ow.close();
}
問
:
如何設置
Java WebServer
的
CLASSPATH,
以包含用戶的
class
文件
?
答
:
有兩種方法可以設置
Java WebServer
的
CLASSPATH
環(huán)境變量
,
以使用戶編寫的
Servlet
能夠調用用戶的
class
文件
.
將用戶的
class
文件放到
JavaWebServer_Dir/classes
目錄下
,
在
Java WebServer
啟動時
,classes
目錄被自動加入到
CLASSPATH
環(huán)境變量中了
.
修改
httpd.nojre
文件
,
將用戶
class
文件所在的路徑名加到
CLASSPATH
環(huán)境變量中.