当数据库的字符集为US7ASCII, WE8DEC, WE8ISO8859P1及WE8MSWIN1252等单字节的字符集时, 使用JDBC时总发现不能准确地处理中文字符, 这个问题几年前就困扰着我, 一直也没有解决的办法. 以前遇到这些数据库的字符集时, 总是将$JAVA_HOME\lib目录下的charsets.jar移走来解决, 但是这样并不能解决CLOB中的中文字符问题. 昨天coolyl又问了这个同样的问题, 我在试验时发现JRE 1.6版本和JRE 1.4版本有所区别, 通过用-Dfile.encoding=ISO-8859-1的命令行选项, 在1.6下可以成功显示汉字, 而1.4下面同样的方法却不行.

c:\jdk\sun160\bin\java -Dfile.encoding=ISO-8859-1 -jar jlib\oasql.jar
c:\jdk\sun142\bin\java -Dfile.encoding=ISO-8859-1 -jar jlib\oasql.jar

    使用1.6版本的JRE时, 情况如下:

ASQL> select * from nls_database_parameters
    2    where parameter=’NLS_CHARACTERSET’;

PARAMETER        VALUE
—————- ————
NLS_CHARACTERSET WE8ISO8859P1

1 rows returned.

ASQL> SELECT ‘中国’ as COL1 FROM DUAL;

COL1
—-
中国

1 rows returned.

    而使用1.4版本的JRE时, 情况如下:

ASQL> SELECT ‘中国’ as COL1 FROM DUAL;

COL1
—-
-?

1 rows returned.

    以上测试在Windows的Command窗口中测试, 机器的Locale为中国, 不知道其他的同行或Java的开发人员有什么好的建议?