作者jimshsu (jims)
看板java
标题Re: [J2SE] 请问系统安装的JRE显示中文的编码问题
时间Tue Dec 8 16:25:14 2009
之前问题搁着几天未解
昨天又开始研究,不过似乎还是有问题
因此再来请教版友是否有其他方法
我用Swing的choose选择中文档案後(部分程式码略)
JFileChooser chooser = new JFileChooser(System.getProperty("user.home"));
File[] sf = chooser.getSelectedFiles();
//网路上找到的转码方式
String unicode = sf[0].getName();
byte[] sysec = unicode.getBytes(System.getProperty("file.encoding"));
byte[] utf8 =
new String(sysec,System.getProperty("file.encoding")).getBytes("UTF-8");
String target = new String(utf8);
最後我只是要把target这个字串写进资料库(资料库设定皆为UTF-8)
不过资料库出现的中文却有部分字元为??
请问各位这里是否有哪个环节造成这样的转码失误?
*******************************************
最新测试状况
其实我後端是用某个学术单位的特殊资料库metaServer
我自己用postgre测试注册这档名後发现
根本不需要这修转码~chooser.getSelectedFiles拿到的string直接可以正常写入
问题可能在这个metaServer,他其实是在postgreSQL资料库上面加上
一层介面,所以我等於用他的client API跟他的metaServer service连线
这个metaServer在将我的查询SQL语法转成PostgreSQL里面相对应的表格名称
送出查询语法(这部分似乎是ODBC连线)
图解:
sql:INSERT INTO metadata(name) VALUES ('"+target+"')
metaServer Client: execute(sql)
--------------------------------------
http
--------------------------------------
metaServer Service:tran(sql)
Tsql:INSERT INTO dir16(user:name) VALUES ('"+target+"')
---------------------------------------
ODBC
---------------------------------------
PostgreSQL:execute(Tsql)
这样的架构下,如果jre的编码是UTF-8的环境下
中文档名不需处理就可以顺利写入
但是jre如果是MS950,就会出现错误
我试过下java -Dfile.encoding=UTF-8 testUpload
这样是可以顺利注册无误
不过实际环境是JWS方式执行,我无法让使用者下载我的class之後更改jre的编码
(或是我的jnlp可以对user启用jre的编码作设定?)
所以似乎得在我的程式里面对choose取得的中文档名作处理~~
这就是目前没法解决的部分
1F:推 PsMonkey:资料库设定 UTF-8,但是 JDBC 忘记设?(mysql 要) 12/08 19:16
2F:推 ogamenewbie:哪个环节有对,你要不要先印出来看看 12/08 19:29
3F:推 asklove:看看你的 conUrl 有没有加 characterEncoding=utf-8 12/08 23:42
※ 编辑: jimshsu 来自: 220.136.87.45 (12/09 11:26)
4F:→ jimshsu:解决了InputStreamReader(socket.getInputStream(),"UTF-8 12/10 10:24