问
:
当用
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
环境变量中.