dedecms织梦内容管理系统    
首页 | java | C/C++ | PHP | 操作系统 | ajax | 脚本编程 | 安全技术 | 本站下载页 | flex | CRM | 专题 | QQ群 | 测试中心 | 会员中心 | 积分规则
  当前位置:主页>java>jsp>文章内容
JB8一个jsp文件编写、保存BUG的原因及修改
来源:www.51jsp.net     作者:    
在JB8中编写、保存的文件的时候通常会出现这种错误(在状态栏中提示)
com.borland.primetime.util.AssertionException: gbk
而并不能正确保存文件。

个人修改办法如下:

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

首先我解析一下原因:

JB8这个问题只出现在文件中,而代码则没有问题
我们用JB(所有JB8以前的版本)编写程序的时候,项目的编码(Encoding)应该是GBK(注意是大写)
这样我们编写Java代码的时候用的就是GBK,在JB8以前版本中,文件和文件的用的都是项目编码

(如:GBK),因此所有文件都用GBK编写

到了JB8就把java文件和文件分开了,继续用项目的编码,而jsp则根据文件头的
<%@ page contentType="text/html;charset=[encoding]"%>
中[encoding](如GBK、gb2312)来读取、编写和写入文件,如果没写明则用ISO-8859-1(这个编码的写

法也有问题,后面会有说明修改的方法),但这里用GBK编写代码的时候则JB8莫名其妙的把GBK改为小写

gbk(borland程序员写错还是其他原因?!谁知道!),而在jdk类库中并没有这中编码(是区分大

小写的),因此就出现以上的错误:
com.borland.primetime.util.AssertionException: gbk

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

lib)

这解析一下别名,
java中支持的编码比较多,如:ISO8859_1,gb2312,GBK等,而是区分大小写的,如果我把ISO8859_1

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

某些并不是自己支持的编码是就会去找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就有帮助)


以后JB8就不会出错了!哈哈 :)

如果对本人理解不认同或有更好的解决方法请指出,欢迎讨论。

 

 

上一篇:下一代WEB开发模型   下一篇:Java web应用开发概览
[收藏] [推荐] [评论(0条)] [返回顶部] [打印本页] [关闭窗口]  
用户名: 新注册) 密码: 匿名评论
评论内容:(不能超过250字,需审核后才会公布,请自觉遵守互联网相关政策法规。
 §最新评论
  热点文章
·JSP入门实例教程
·什么是Servlet
·JSP常用内置对象使用说明
·JSP自定义标签由浅到深详细讲解
·JSP自定义标签由浅到深详细讲解
·Java Servlet技术
·Javax.servlet API的特征
·一个简单的jsp注册页面
·JSTL操作数据库示例
·JSP入门实例教程13-MVC模式
·JSP入门实例教程12-jstl处理数
·JSP入门实例教程11-jstl处理xml
  相关文章
·下一代WEB开发模型
·Java web应用开发概览
·用JDOM包实现生成XML文件的简单
·jsp安全问题及其解决建议
·JSP中读文件和写文件的例子
·JSP安全性初探
·一个读取xml文件内容的类
·jsp读取大对象CLOB并生成xml文件
·提升JSP应用程序的七大绝招
·深入剖析JSP和Servlet对中文的处
·Taglib 原理和实现之什么是Tagli
·Taglib 原理和实现之支持El表达
  相关信息
copy right @ 百家拳软件项目研究室 2007 辽ICP备07011763