下面这段代码中的‘珺’字,只能用缺省的GBK解码,其他解码都显示为问号String hello = "你好李珺";
System.out.println("[test 1-1]: with system default encoding=" + System.getProperty("file.encoding") + "\nstring=" + hello + "\tlength=" + hello.length());
hello = new String(hello.getBytes(), "GB2312");
System.out.println("[test 1-2]: getBytes with platform default encoding and decoding as gb2312:\nstring="+ hello + "\tlength=" + hello.length());
hello = new String(hello.getBytes("UTF8"));
System.out.println("[test 1-3]: convert string to UTF8\nstring="+ hello + "\tlength=" + hello.length());我的数据库编码是zhs16cgb231280,通过JDBC连接取出来,类似‘珺’这样的冷僻字就变成问号了,客户端是中文winxp sp2,nls_lang设置为zhs16cgb231280或zhs16gbk都试过,还是乱码,请问有什么办法处理,可以正常显示呢?先谢了
System.out.println("[test 1-1]: with system default encoding=" + System.getProperty("file.encoding") + "\nstring=" + hello + "\tlength=" + hello.length());
hello = new String(hello.getBytes(), "GB2312");
System.out.println("[test 1-2]: getBytes with platform default encoding and decoding as gb2312:\nstring="+ hello + "\tlength=" + hello.length());
hello = new String(hello.getBytes("UTF8"));
System.out.println("[test 1-3]: convert string to UTF8\nstring="+ hello + "\tlength=" + hello.length());我的数据库编码是zhs16cgb231280,通过JDBC连接取出来,类似‘珺’这样的冷僻字就变成问号了,客户端是中文winxp sp2,nls_lang设置为zhs16cgb231280或zhs16gbk都试过,还是乱码,请问有什么办法处理,可以正常显示呢?先谢了
解决方案 »
- 关于URL传中文汉字参数乱码的问题。。。
- Lucene多索引,多Field 检索问题 read past EOF
- CAS、NullPointerException求解决
- myeclipse自动生成hibernate CRUD代码的疑惑
- org.springframework.beans.factory.BeanCreationException
- commons-fileupload 文件上传问题
- Hibernate3-0连接数据库方法(谢谢大家了)
- SSH框架中在做注册界面之后出现Confirm Perspective Switch
- mysql存储主键的系统表
- 概念的问题:SessionBean是不是只能针对一个客户端程序,是不是只能在一个程序里保存变量,这个程序结束或者
- 用java为IE写个插件可能吗?
- 新手请问大家接口与抽象类的问题.....
[test 1-1]: with system default encoding=GBK
string=Hello world 你好李珺 length=16[test 1-2]: getBytes with platform default encoding and decoding as gb2312:
string=Hello world 你好李?B length=17hello = new String(hello.getBytes("UTF8"))的结果
[test 1-3]: convert string to UTF8
string=Hello world 浣犲ソ鏉庯拷B length=19hello = new String(hello.getBytes("UTF8"),"UTF8")的结果
[test 1-3]: convert string to UTF8
string=Hello world 你好李?B length=17只有缺省的GBK可以正常解码,长度是16,其他字符集解码都不对,长度是17,冷僻字无法正常显示
回复5楼:数据库字符集是zhs16cgb231280
迁的时候发现有很多冷僻字会变成问号,所以想看能不能通过java转换一下读取之前转换倒是可以先把varchar2数据转换为raw类型,然后到目标库,再从raw转会varchar2,通过db link,insert就可以实现;但这样做非常麻烦,而且性能很差,所以就想有没有一种更好的办法,比如通过java
查询依然乱码。
说明,你存数据进去的时候就有问题
通过pl/sql或者sqlplus等工具查询依然乱码。
说明,你存数据进去的时候就有问题
weblogic oci driver这个倒是没试过,oci不是数据库厂商开发的吗?
13:现在就是要在新库上用更大的字符集GBK,问题是怎么保证老库上的数据迁的时候不会出现冷僻字变问号的问题呢?
UTF-8:Unicode Transformation Format-8bit,允许含BOM,但通常不含BOM。是用以解决国际上字符的一种多字节编码,它对英文使用8位(即一个字节),中文使用24为(三个字节)来编码。UTF-8包含全世界所有国家需要用到的字符,是国际编码,通用性强。UTF-8编码的文字可以在各国支持UTF8字符集的浏览器上显示。如,如果是UTF8编码,则在外国人的英文IE上也能显示中文,他们无需下载IE的中文语言支持包。 GBK是国家标准GB2312基础上扩容后兼容GB2312的标准。GBK的文字编码是用双字节来表示的,即不论中、英文字符均使用双字节来表示,为了区分中文,将其最高位都设定成1。GBK包含全部中文字符,是国家编码,通用性比UTF8差,不过UTF8占用的数据库比GBD大。
new String(rs.getString("user_name").getBytes("gb2321"))
hello = new String(hello.getBytes("UTF8"),"UTF8");这句话怎么可能有问题.hello是什么就会输出什么.
LZ的输出有问题,是因为你的测试代码写的有问题.
hello = new String(hello.getBytes(), "GB2312"); 当你使用这句话的时候,已经给hello重新赋了一新值,就是"Hello world 你好李?B ",已经不是"你好李珺"了.在使用前先给hello赋你要测试的值:hello="你好李珺";
hello = new String(hello.getBytes("UTF8"),"UTF8");这样就不会有问题了.
GB2312有问题,是因为GB2312不包含"珺"字,所以显示个?.你可以使用UTF-8连接数据库,只要你的新数据库使用的字符集包含"珺"字,这个"珺"不会有任何问题的.其他字也一样.
// Retrieve column values for this row
try{
String code = rset.getString(1);
String name = rset.getString(2);
String partner = rset.getString(3);
String address = rset.getString(4);
String phone = rset.getString(5);
code = new String(code.getBytes("GB2312"));
name = new String(name.getBytes("GB2312"));
partner = new String(partner.getBytes("GB2312"));
address = new String(address.getBytes("GB2312"));
phone = new String(phone.getBytes("GB2312"));
gui.addToJTable(code, name, partner, address, phone); // Update gui
}catch (Exception e) {
System.out.println(e.toString());
}
}
论坛不能贴图吗?我截屏贴不了
和zhs16gbk都试过登陆到数据库服务器,设置nls_lang=zhs16cgb231280,sqlplus查询这些汉字,显示正常
while (rset.next()) { // Point result set to next row
// Retrieve column values for this row
try{
String code = rset.getString(1);
String name = rset.getString(2);
String partner = rset.getString(3);
String address = rset.getString(4);
String phone = rset.getString(5);
//直接打印出来看看,应该是正确的,如果你的连接没有问题.不知道你为什么要转?如果你要转也不要用GB2312,包含的字符太少了.
gui.addToJTable(code, name, partner, address, phone); // Update gui
}catch (Exception e) {
System.out.println(e.toString());
}
}
OracleDataSource ods = new OracleDataSource(); // Sets the driver type
ods.setDriverType("thin"); // Sets the database server name
ods.setServerName((String)prop.get("HostName")); // Sets the database name
ods.setDatabaseName((String)prop.get("SID")); // Sets the port number
ods.setPortNumber(new Integer((String)prop.get("Port")).intValue()); // Sets the user name
ods.setUser((String)prop.get("UserName")); // Sets the password
ods.setPassword((String)prop.get("Password")); // Create a connection object
connection = ods.getConnection();
new String(name.getBytes("ISO-8859-1"),"GBK");这样所有的都能转过来 要你是用Struts 的话就要继承和重写了
那么你就 在java 里面 String name = rs.getString("user_name");
new String(name.getBytes("ISO-8859-1"),"GBK"); 试一下吧
String name = rs.getString("user_name");
new String(name.getBytes("ISO-8859-1"),"GBK");
显示所有汉字都变成问号
这里没用struts,就是非常简单的一个小测试程序,目的其实就是从源库抽数据,然后批量插到新库中
源库是zhs16cgb231280,新库是zhs16gbk但是,现在遇到的问题就是发现,插入新库以后,这些冷僻字就都变成问号了,通过sqlplus查看也是问号,在java界面显示也是问号
new String(name.getBytes("ISO-8859-1"),"GBK");
支持
对的
用iso-8859-1解码以后,转成其他编码都是问号,不知道为什么
java.io.UnsupportedEncodingException: zhs16cgb231280冷僻字无法显示的问题,我以前就听说过,有些业务系统因为打发票,姓名的冷僻字就无法处理;但是不知道有没有人解决了这个问题
就是说的编码格式的 感觉还不错 也许能对你有点什么启发!
default-collation=gbk_chinese_ci (3)数据库连接串中指定字符集 URL=jdbc:mysql://yourIP/college?user=root&password=yourPassword&useUnicode=true&characterEncoding=gbk 注:在mysql4.1.0版 要加useUnicode=true&characterEncoding=gbk 如果是5.0版以上的,加不加都是没有关系的! (4)在创建数据库时指定字符集 create database yourDB CHARACTER SET gbk; (5)在dos命令上要设置 set names gbk 改变服务器编码必须重启服务器