遇到问题,写下自己的解决办法,如有错误,还望指点。
Tomcat
tomcat本身受部署平台(window、linxu)编码的影响,一般window中文版本的编码都是GBK,linux系统编码为UTF-8编码,所以在中文在这两个版本的tomcat服务传输会有乱码的问题。
乱码解决分为自身平台内部乱码和多服务调用之间中文乱码两种情况。
第一种情况:平台内部乱码
GET方式
这种方式的乱码一般都是修改tomcat中server.xml中的connector,添加URIEncoding=”UTF-8”
POST方式
如果使用JSP,则把页面的编码都改为UTF-8;
如果使用Servlet,则使用setCharaterEncoding();设置为UTF-8;
保证前后台编码一致即可解决。
第二种情况:跨服务跨应用调用乱码
这种情况等待我研究,如何在不修改发布服务的情况下解决。
暂时只能保持发布服务的编码一致,建议统一使用UTF-8编码。
修改jvm运行的编码格式
1.window
修改catalina.bat,添加
set JAVA_OPTS=%JAVA_OPTS% -Dfile.encoding=utf-8
2.Linux
修改catalina.sh,添加
set JAVA_OPTS=%JAVA_OPTS% -Dfile.encoding=UTF-8
Myelipse+Tomcat
开发工具有的使用myelipse,有的使用eclipse,这种开发环境搭建tomcat是有些区别的。这里还是eclipse较为严谨,创建好Server后,编码由自己说了算,所以很难在eclipse开发中遇到乱码,即使遇到了,通过修改workspace、project的编码格式就解决了。
但是myelipse中console乱码,就不好解决了。但也有办法。
- tomcat jdk jvm启动参数:-Dfile.encoding=UTF-8
- tomcat lanuch 自定义一个myelipse 的tomcat实例
在我们添加tomcat的时候,只是添加了tomcat的启动和关闭入口,对于编码格式,还是tomcat自身的,所以修改myelipse的workspace以及project编码无济于事,乱码依旧。所以想办法让myclipse管理tomcat,自定义一个tomcat示例。
问题:
没有接触过跨服务的调用,不知道他们之间的编码格式是如何转换的。
比如现在好多中间件,早期的ApacheMQ,现在Kafka、RabbitMQ等,是怎么做到不同编码的格式转换?(自己确实知道的太少了)