把XML上传到WEB,插入oracl数据库时,中文变为问号.

tekhdy715 2010-06-01 03:46:52
这是我的XML:
<?xml version="1.0" encoding="GB2312"?>
<BFCP>
<ServiceName>taxKernel.XFSKspzmx</ServiceName>
<JBXX>
<NSRSBH>320200757977788</NSRSBH>
<NSRPWD>1</NSRPWD>
<SSSQ_Q>20100601</SSSQ_Q>
<SSSQ_Z>20100630</SSSQ_Z>
</JBXX>
<XFS_CPY>
<KSPZMX>
<YSXFPMC>润滑油</YSXFPMC>
<PZLB>代扣代收税款凭证</PZLB>
<PZHM>01231686</PZHM>
<KPRQ>2010-01-02</KPRQ>
<SL>1013.4</SL>
<JE>20003.7</JE>
<SYSL>1.4</SYSL>
<XFSSE>7087.88</XFSSE>
</KSPZMX>


</XFS_CPY>
</BFCP>

这里解读XML
//解读明文
private static String fileIn(String filepath) throws Exception {
java.io.File file = new java.io.File(filepath);

int length = (int) file.length();
byte[] b = new byte[length];

try {
FileInputStream fis = new FileInputStream(filepath);
fis.read(b);
fis.close();
}
catch (Exception e) {
e.printStackTrace();
}
return new String(b, "GBK"); //这里转换成GBK格式
}
我把他转为GBK格式。

这里调上面这个解读的方法:hashdata.put("SBB_XFS_CPY_BQQDZYKCXFSPZMXB", fileIn(fileName[i]));

这里就是往数据库插入数据的方法:
Table t = TableLoader.getInstance().Load(tableName);
Vector v = t.getInsertSql();

我在这里调试看V的内容,V里面数字的值正常显示,但是里面的中文:润滑油却变成了问号,我试了很多格式,转换成GBK,uft-8,ISO-8859-1都不行,最后在取到V里面的时候中文还是为问号,请问这是怎么回事呢,有解决的办法吗?
...全文
91 16 打赏 收藏 转发到动态 举报
写回复
用AI写文章
16 条回复
切换为时间正序
请发表友善的回复…
发表回复
tekhdy715 2010-06-01
  • 打赏
  • 举报
回复
谢谢大家,虽然还没彻底解决,至少已经有了方向和思路了。
lihui820905 2010-06-01
  • 打赏
  • 举报
回复
第一,确认你的xml文件的编码是GBK,注意,不是那个encoding指定的编码,这2个不一定一致。
第二,如果你是往US7ASCII的数据库里存,请先将中文转成ISO-8859-1。以后用的时候,取出来再转成GBK。
izard999 2010-06-01
  • 打赏
  • 举报
回复
字符集编码统一一下.! 不统一出乱码..那是非常常见的事
BearKin 2010-06-01
  • 打赏
  • 举报
回复
[Quote=引用 11 楼 tekhdy715 的回复:]
我试过了,转成ISO-8859-1和UTF8都不行,都有问号,但如果只转一次的话就没问题,晕,可以正确显示中文@_@
[/Quote]
确认出现乱码的步骤再决定操作咯 明明不需要转码的
学习了 没明白LZ的问题 不过从大哥们那里学习的转码的方法
crazylaa 2010-06-01
  • 打赏
  • 举报
回复
[Quote=引用 11 楼 tekhdy715 的回复:]

我试过了,转成ISO-8859-1和UTF8都不行,都有问号,但如果只转一次的话就没问题,晕,可以正确显示中文@_@
[/Quote]
那你就只转一次好啦,呵呵
tekhdy715 2010-06-01
  • 打赏
  • 举报
回复
我试过了,转成ISO-8859-1和UTF8都不行,都有问号,但如果只转一次的话就没问题,晕,可以正确显示中文@_@
crazylaa 2010-06-01
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 tekhdy715 的回复:]

请问如果我的数据库编码是US7ASCII,我是不是这样转?
str=new String(rs.getBytes(1),"GBK"); str=new String(str.getBytes("ISO-8859-1"),"GBK")
[/Quote]

这个不是很清楚,你试试看吧。我一直都统一UTF8,基本没碰见过乱码问题。
tekhdy715 2010-06-01
  • 打赏
  • 举报
回复
请问如果我的数据库编码是US7ASCII,我是不是这样转?
str=new String(rs.getBytes(1),"GBK"); str=new String(str.getBytes("ISO-8859-1"),"GBK")
tekhdy715 2010-06-01
  • 打赏
  • 举报
回复
谢谢,我试试
crazylaa 2010-06-01
  • 打赏
  • 举报
回复
取值的时候,参见下段:
看看你的oracle编码,java默认编码都是unicode的,如果你的数据库编码是GBK或者latin之类的,需要转码比如数据库里存放的是GBK,需要2步转换, str=new String(rs.getBytes(1),"GBK"); 再str=new String(str.getBytes("UTF-8"),"GBK"),才可以正确显示中文。
crazylaa 2010-06-01
  • 打赏
  • 举报
回复
你的数据库是什么字符集?
则这里
return new String(b, "GBK"); //这里转换成GBK格式
的改为一样的字符集。
扁鵲東南飛 2010-06-01
  • 打赏
  • 举报
回复
<?xml version="1.0" encoding="GB2312"?>

全部都统一,数据库也统一用utf-8.
tekhdy715 2010-06-01
  • 打赏
  • 举报
回复
上传程序被限定死了,只能上传GB2312格式的XML文件,请问该怎么处理呢?
muler1988 2010-06-01
  • 打赏
  • 举报
回复
不太清楚 顶一下啊
tekhdy715 2010-06-01
  • 打赏
  • 举报
回复
你是说把XML的<?xml version="1.0" encoding="GB2312"?> 这里的GB2312改成UTF8还是
return new String(b, "GBK"); 这里转换成UTF-8
healer_kx 2010-06-01
  • 打赏
  • 举报
回复
一律UTF8,这是现在最常见的问题了。

81,116

社区成员

发帖
与我相关
我的任务
社区描述
Java Web 开发
社区管理员
  • Web 开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧