問
:
當用 JDBC 向數據庫中插入數據或從數據庫中提取數據時 , 為何有時中文字符會顯示為亂碼 ?
答 :
這個問題的實現通常與各個 JDBC driver 的實現有關 . 目前大多數 JDBC driver 采用本地編碼格式來傳輸中文字符 , 例如中文字符 "0x4175" 會被轉成 "0x41" 和 "0x75" 進行傳輸 . 因此我們需要對 JDBC driver 返回的字符以及要發給 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 環境變量 , 以使用戶編寫的 Servlet 能夠調用用戶的 class 文件 .
將用戶的 class 文件放到 JavaWebServer_Dir/classes 目錄下 , 在 Java WebServer 啟動時 ,classes 目錄被自動加入到 CLASSPATH 環境變量中了 .
修改 httpd.nojre 文件 , 將用戶 class 文件所在的路徑名加到 CLASSPATH 環境變量中.
當用 JDBC 向數據庫中插入數據或從數據庫中提取數據時 , 為何有時中文字符會顯示為亂碼 ?
答 :
這個問題的實現通常與各個 JDBC driver 的實現有關 . 目前大多數 JDBC driver 采用本地編碼格式來傳輸中文字符 , 例如中文字符 "0x4175" 會被轉成 "0x41" 和 "0x75" 進行傳輸 . 因此我們需要對 JDBC driver 返回的字符以及要發給 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 環境變量 , 以使用戶編寫的 Servlet 能夠調用用戶的 class 文件 .
將用戶的 class 文件放到 JavaWebServer_Dir/classes 目錄下 , 在 Java WebServer 啟動時 ,classes 目錄被自動加入到 CLASSPATH 環境變量中了 .
修改 httpd.nojre 文件 , 將用戶 class 文件所在的路徑名加到 CLASSPATH 環境變量中.