关于编码的奇怪问题,100分伺候

hellobb 2003-08-12 06:06:40
系统环境:win2k中文版/oracle8.1.16中文版/tomcat4.1.24/jdk1.4(是同一台机器);

目的:如果SQL语句未能正常执行,显示ORACLE的错误提示信息;

现象:
String temp= e.toString();
temp=new String(temp.getBytes("GBK"),"ISO8859_1");
out.print(temp);
可以正确显示汉字;

问题:
我想知道这里为什么要设置ISO8859_1参数,否则显示乱码。我的机器的字符集已经是GBK了,为什么还要用ISO8859_1编码?ISO8859-1不是支持的是西欧语言吗?
按理说,ISO8859_1所在的位置应该是支持中文的字集名称才对呀?谁给解释一下!
...全文
14 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
hellking 2003-08-15
  • 打赏
  • 举报
回复
1、如何判断数据库的编码方式?
这个应该和数据库的设置有关

2、最后out.print(temp);的时候,temp应该是8859编码的,为什么能正常显示汉字?
你可以查一下各种编码的格式,如gbk,8859,utf等,8859编码应该是比较好的编码方式,他不会在编码过程中丢失任何信息。

在你的几行程序里temp经历了一下过程:
(从数据库取出的e编码未知)-->(toString() 把e按GBK解码并编码成temp)-->(在 new String()方法里把temp编码成8859)-->把temp输出

如果你直接从数据库里把e取出来,按byte[]流的方式打印出来也是一样的。但是不要用任何从writer类继承出来的方法输出。他在中间会做些手脚
hellobb 2003-08-13
  • 打赏
  • 举报
回复
那我还有疑问:
1、如何判断数据库的编码方式?
2、最后out.print(temp);的时候,temp应该是8859编码的,为什么能正常显示汉字?
hellking 2003-08-13
  • 打赏
  • 举报
回复
我想可能是你的数据库里存储的时候是ISO8859-1的编码,
String temp= e.toString(); //在这里temp是GBK编码,其实e应该是ISO8859
temp=new String(temp.getBytes("GBK"),"ISO8859_1");//在这里把GBK转成ISO8859
out.print(temp);//打印字符串出去。
hellobb 2003-08-13
  • 打赏
  • 举报
回复
没人?帮帮忙啊
jouny0 2003-08-13
  • 打赏
  • 举报
回复
up
hellobb 2003-08-13
  • 打赏
  • 举报
回复
我用System.getProperty("file.encoding")得到的值是GBK,win2k的默认语言设置是简体中文。我还要怎么检查呀?
lsy110 2003-08-13
  • 打赏
  • 举报
回复
Oracle中存放的是GBK是Char型,但是Java是按照流(Stream)方式来处理的,如果你没有设置流处理方式的话,他就会按照默认的处理方式进行。按照你的说法应该是你的默认字符集不是GBK了!否则不会出现这种情况。
hellobb 2003-08-13
  • 打赏
  • 举报
回复
up
ashes 2003-08-13
  • 打赏
  • 举报
回复
看看你的 浏览器->编码 是不是“西欧字符(ISO)"?
flashspy 2003-08-12
  • 打赏
  • 举报
回复
可能是tomcat的问题,看看out默认字符集,网上有很多讨论乱码的

62,614

社区成员

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

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