中间件字符乱码问题

中间件字符乱码问题

ID:8907221

大小:116.50 KB

页数:8页

时间:2018-04-11

中间件字符乱码问题_第1页
中间件字符乱码问题_第2页
中间件字符乱码问题_第3页
中间件字符乱码问题_第4页
中间件字符乱码问题_第5页
资源描述:

《中间件字符乱码问题》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库

1、字符集转换解决方案问题的提出:关于字符串的字符集转换,目前应用系统中主要在对数据库操作的时候。1.向数据提交操作请求会对每一个String类型的变量做一次GBKToUnicode的操作,实际上此操作最终会触发unicodeToGBK操作,而在unicodeToGBK中会调用isGBKString方法用来判定此字符串是否是GBK编码,采用的方式是循环比较字符串数组中的每一个char对象值。2.从数据库返回数据信息会对每一个String类型做一次unicodeToGBK的操作,同样会调用isGBKSt

2、ring方法。由于上述操作导致应用服务器的性能产生很大的负载,因此需要及时改进。已经解决的问题:对于从数据库返回数据信息而做的unicodeToGBK操作,我们主要是在schema的getString时调用,及exesql中的getdatavalue中调用。Schema中的调用我们通过一个静态变量SysConst.CHANGECHARSET来控制是否执行(目前默认情况下是不执行),而exesql中的调用是强制执行的。经过民生的近期测试,我们发现可以去掉exesql中的unicodeToGBK操作,

3、而保证数据在返回到前台的时候没有乱码。尚未解决的问题:对于向数据提交操作请求而做的GBKToUnicode的操作,实际上此操作也依赖于SysConst.CHANGECHARSET变量l如果此变量为true则执行newString(strOriginal.getBytes("GBK"),"ISO8859_1");l如果此变量为false则执行newString(strOriginal.getBytes("ISO8859_1"),"GBK");现在系统中SysConst.CHANGECHARSET默认

4、设置为false,而不论此变量为何值,系统都会执行isGBKString这个操作。问题:如果我们去除这一操作,会导致提交到后台数据库中的中文全部变成??的形式,在查询的时候,也无法使用中文作为查询条件。以前的存储方式:以前的应用是通过unicodeToGBK进行转换,提交给数据库的时候,字符集的编码采用的是GBK。之所以当初要在后台统一字符集处理,是因为无法有效保证前台提交过来的信息编码格式。问题分析:产生上述情况的原因是Jsp/Servlet不能接收form提交的汉字,也不能解析通过get方式传

5、递的汉字。运行于Java应用服务器的JSP/Servlet为Browser提供HTML内容,其过程如下图所示:其中有字符编码转换的地方有:lJSP编译。Java应用服务器将根据JVM的file.encoding值读取JSP源文件,编译生成JAVA源文件,再根据file.encoding值写回文件系统。如果当前系统语言支持GBK,那么这时候不会出现encoding问题。如果是英文的系统,如LANG是en_US的Linux,AIX或Solaris,则要将JVM的file.encoding值置成GBK。

6、系统语言如果是GB2312,则根据需要,确定要不要设置file.encoding,将file.encoding设为GBK可以解决潜在的GBK字符乱码问题lJava需要被编译为.class才能在JVM中执行,这个过程存在与a.同样的file.encoding问题。从这里开始servlet和jsp的运行就类似了,只不过Servlet的编译不是自动进行的。对于JSP程序,对产生的JAVA中间文件的编译是自动进行的(在程序中直接调用sun.tools.javac.Main类).因此如果在这一步出现问题的话

7、,也要检查encoding和OS的语言环境,或者将内嵌在JSPJAVACode中的静态汉字转为Unicode,要么静态文本输出不要放在JAVAcode中。对于Servlet,javac编译时手工指定-encoding参数就可以了。lServlet需要将HTML页面内容转换为browser可接受的encoding内容发送出去。依赖于各JAVAAppServer的实现方式,有的将查询Browser的accept-charset和accept-language参数或以其它猜的方式确定encoding值,

8、有的则不管。因此采用固定encoding也许是最好的解决方法。对于中文网页,可在JSP或Servlet中设置contentType="text/html;charset=GB2312";如果页面中有GBK字符,则设置为contentType="text/html;charset=GBK",由于IE和Netscape对GBK的支持程度不一样,作这种设置时需要测试一下。因为16位JAVAchar在网络传送时高8位会被丢弃,也为了确保Servlet页面中的汉字(包括内嵌的和servlet

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。