5°

特殊的错误

收到这个bug后,仔细看了一下日志文件,是在tomcat启动的时候,spring进行初始化applicationcontaxt.xml,编码转换错误。

由于这个这个项目在其他平台是可以运行的,初次判断是环境问题。

做了如下尝试

1、发现tomcat的版本是windows版本,所有版本换为相同版本的linxu .

2、发现jdk版本,这本机的不太一样,换了一个jdk1.8最新的版本。

发现问题依然存在。

做2次思考,既然是编码问题,那么就改一下编码:

1、给tomcat启动参数里添加fileecncoding=UTF-8编码参数

2、修改linux操作系统编码

     /etc/profile

export LC_ALL="zh_CN.GBK"
export LANG="zh_CN.GBK"

 

修改

/etc/sysconfig/i18n

LANG="zh_CN.GBK"
LANGUAGE="zh_CN.GBK;zh_CN.GB18030;zh_CN.GB2312;zh_CN"

 

3、写了一个jdk一个简单的程序,读取操作系统的编码,以确定 tomcat 能正确的读取编码。

​问题依然没有解决

进行第三次思考,仔细看了一下tomcat的日志 

Caused by: oracle.xml.parser.v2.XMLParseExceptionpublicId: -//SPRING//DTD BEAN//EN; systemId: http://www.springframework.org/dtd/spring-beans.dtd; lineNumber: 1; columnNumber: 38; Illegal change of encoding: from gb2312 to UTF-8.

 

仔细的看了一下xmlparser2的代码,没有发现异常现象。

又仔细的看了一下applicationcontent.xml,和第一个报错的文件TopOA_Routine.xml,发现 applicationcontent.xml 文件的编码格式为utf8,TopOA_Routine.xml的文件格式为gbk,也就是异常里报的gb2312转utf-8错误。大概知道原因,因为第一个​是utf-8,所以后面的都按照utf-8处理了。

推断:操作系统在读取文件,或线程共享的时候,做了一些处理。

总结:如果是java项目,非特殊要求,全部都utf8,数据,项目代码,资源文件。至于说大部分操作系统都能成功处理,个别无法处理,只能说测试未完全覆盖。

 

最后标注一下环境tomcat9.0.12,jdk1.8.0_212-b10,操作系统在centos ,ubuntu是OK的,在     Oracle Linux Server release 6.4

本文由【internetafei】发布于开源中国,原文链接:https://my.oschina.net/internetafei/blog/3073347

全部评论: 0

    我有话说: