Java中文乱码破碎重组_java乱码解决方案

1: 大家有些时候为系统乱码而烦恼,近期有时间整理了下解决乱码问题:

一个系统中关于设置编码地方很多: 数据库,项目,平台系统,容器等;

关于应用:

所有设置编码的地方到最后都得跟JVM 打交道,所以JVM把所有编码都先转换成unicode 码,然后输出时候在相反转换回去,这里是出现乱码根;

例如:一个输入参数以GBK编码,JVM 编译时候  GBK--->unicode, 然后如果输出时候 unicode --->UTF-8(客户端编码) 就可能乱码;所以大家为了

必免有乱码情况,所有都统一编码;

以下Linux为例:

JVM 启动参数可以设置有两地方(包括两设置编码属性),第一:全局/etc/profile 文件中 ,容器启动脚本中(tomcat catalina.sh)

具体参数如下:

JAVA_OPTS=" -server -Xms32m -Xmx512m -XX:MaxPermSize=256m -Djava.net.preferIPv4Stack=true -Djava.awt.headless=true -Dsun.net.client.defaultConnectTimeout=60000 -Dsun.net.client.defaultReadTimeout=60000 -Djmagick.systemclassloader=no -Djava.library.path=/usr/local/lib:$ORACLE_HOME/lib -Dnetworkaddress.cache.ttl=300 -Dsun.net.inetaddr.ttl=300 -Dfile.encoding=GBK";export JAVA_OPTS

其中file.encoding=GBK ----> JVM 编译参数时候按GBK编成转换成unicode;

sun.jnu.encoding = UTF-8  --->JVM 编译源代码指定的编码(因为JAVA源码没有中文,所以一般不指定);

这两参数可以手动设置:第一/etc/profile ,还可以在容器启动脚本中(tomcat catalina.sh)设置,

如果/etc/profile设置了是所有JAVA进程生效;tomcat catalina.sh 只对某个容器JAVA进程生效(多实例部署时可能用到);

如果两都设置,后者会覆盖前者;如果两者都不设置取profile 文件中设置,如果profile也不设置,找.bash_profile文件中设置, profile ,.bashprofile都不设置 ,取系统安装时候选择的编码;

如果两者中有一者指定了JVM启动编码参数,JVM 不在参考系统编码设置(例profile,.bash_profile 文件中设置变量 export LANG="UTF-8");

以上数据可以在Linux 用以下命令查询出来:

ps -au |grep jd-movie //查询某个Linux帐户进程;

jinfo 11229 //可以查看当前JVM进程所有参数变量;

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值