分享
 
 
 

一个JSP文件编写保存BUG的原因及修改

王朝java/jsp·作者佚名  2008-05-19
窄屏简体版  字體: |||超大  

在JB8中编写、保存的jsp文件的时候通常会出现这种错误(在状态栏中提示)com.borland.primetime.util.AssertionException: gbk而并不能正确保存jsp文件。

个人修改办法如下:

这个问题我在用JB8编写jsp文件时候发现的,现在本人已基本解决(但是改动了jdk类库里一些代码)

首先我解析一下原因:

JB8这个问题只出现在jsp文件中,而java代码则没有问题

我们用JB(所有JB8以前的版本)编写程序的时候,项目的编码(Encoding)应该是GBK(注意是大写)这样我们编写Java代码的时候用的就是GBK,在JB8以前版本中,java文件和jsp文件的用的都是项目编码

(如:GBK),因此所有文件都用GBK编写到了JB8就把java文件和jsp文件分开了,java继续用项目的编码,而jsp则根据jsp文件头的<%@ page contentType="text/html;charset=[encoding]"%中[encoding](如GBK、gb2312)来读取、编写和写入文件,如果没写明则用ISO-8859-1(这个编码的写法也有问题,后面会有说明修改的方法),但这里用GBK编写代码的时候则JB8莫名其妙的把GBK改为小写gbk(borland程序员写错还是其他原因?!谁知道!),而在jdk类库中并没有这中编码(java是区分大小写的),因此就出现以上的错误:com.borland.primetime.util.AssertionException: gbk

解决方法:

在用我的修改方法前,大家错好能找些关于java字符集(支持的编码)的资料(论坛精华区有资料)我这里修改的jdk的类库,并不修改JB8的代码(JB8太庞大,找起来不好找)在jdk类库中负责编码别名转换类是sun.io.CharacterEncoding(在rt.jar包中,jdk目录是jdk1.4\jre\lib)

这解析一下别名

java中支持的编码比较多,如:ISO8859_1,gb2312,GBK等,而java是区分大小写的,如果我把ISO8859_1

写成iso8859_1,java会出错的,就像JB8把GBK写成gbk就出错了,那java错了一些容错处理,当他读到

某些并不是自己支持的编码是就会去找sun.io.CharacterEncoding,看看这里有没有对应的编码转换,

如果有则转成标准的编码,这里我们这些写得并不标准得编码成为编码得别名,而编码得别名可能会有

很多(这个跟操作系统有关,如ISO8859_1就有很多中写法:iso_8859-1,iso8859_1)别名具体的英文名字解析我不记得了,我自己按自己的理解把它叫做别名

接着我简要说明一下sun.io.CharacterEncoding是怎样实现别名的转换说起来很简单,就是用一个HashMap做key与value的对应表sun.io.CharacterEncoding部分编码如下(用jad反编译出来的)

((HashMap) (obj)).put("us-ascii", "ASCII");

((HashMap) (obj)).put("ascii", "ASCII");

((HashMap) (obj)).put("646", "ASCII");

((HashMap) (obj)).put("iso_646.irv:1983", "ASCII");

((HashMap) (obj)).put("ansi_x3.4-1968", "ASCII");

((HashMap) (obj)).put("iso646-us", "ASCII");

((HashMap) (obj)).put("default", "ASCII");

((HashMap) (obj)).put("ascii7", "ASCII");

((HashMap) (obj)).put("8859_1", "ISO8859_1");

((HashMap) (obj)).put("iso_8859-1:1987", "ISO8859_1");

((HashMap) (obj)).put("iso-ir-100", "ISO8859_1");

((HashMap) (obj)).put("iso_8859-1", "ISO8859_1");

((HashMap) (obj)).put("iso-8859-1", "ISO8859_1");

((HashMap) (obj)).put("iso8859-1", "ISO8859_1");

这个对应表比较大,但找起来并不困难对照前面jb8的问题,我们很容易就找到原因所在,这个对应表中并没有gbk和GBK的对应!!!!那我们就知道如何解决了,自己加!!!((HashMap) (obj)).put("gbk", "GBK");(【现在不知道有没有记错】后来我同时发现JB8也写错了一个编码ISO-8859_1,这个在对应表中也没有,所以建议大家也加上:((HashMap) (obj)).put("ISO_8859-1", "ISO8859_1");)然后编译自己sun.io.CharacterEncoding,然后加到JB8的jdk1.4的rt.jar包中即可(怎样操作请参考jar.exe的说明,在命令窗口运行jar就有帮助)

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
2023年上半年GDP全球前十五强
 百态   2023-10-24
美众议院议长启动对拜登的弹劾调查
 百态   2023-09-13
上海、济南、武汉等多地出现不明坠落物
 探索   2023-09-06
印度或要将国名改为“巴拉特”
 百态   2023-09-06
男子为女友送行,买票不登机被捕
 百态   2023-08-20
手机地震预警功能怎么开?
 干货   2023-08-06
女子4年卖2套房花700多万做美容:不但没变美脸,面部还出现变形
 百态   2023-08-04
住户一楼被水淹 还冲来8头猪
 百态   2023-07-31
女子体内爬出大量瓜子状活虫
 百态   2023-07-25
地球连续35年收到神秘规律性信号,网友:不要回答!
 探索   2023-07-21
全球镓价格本周大涨27%
 探索   2023-07-09
钱都流向了那些不缺钱的人,苦都留给了能吃苦的人
 探索   2023-07-02
倩女手游刀客魅者强控制(强混乱强眩晕强睡眠)和对应控制抗性的关系
 百态   2020-08-20
美国5月9日最新疫情:美国确诊人数突破131万
 百态   2020-05-09
荷兰政府宣布将集体辞职
 干货   2020-04-30
倩女幽魂手游师徒任务情义春秋猜成语答案逍遥观:鹏程万里
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案神机营:射石饮羽
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案昆仑山:拔刀相助
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案天工阁:鬼斧神工
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案丝路古道:单枪匹马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:与虎谋皮
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:李代桃僵
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:指鹿为马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:小鸟依人
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:千金买邻
 干货   2019-11-12
 
推荐阅读
 
 
 
>>返回首頁<<
 
靜靜地坐在廢墟上,四周的荒凉一望無際,忽然覺得,淒涼也很美
© 2005- 王朝網路 版權所有