网站首页 文章专栏 议 java 在docker容器里的UTF-8的异想
议 java 在docker容器里的UTF-8的异想
编辑时间:May 5, 2017, 8:48 a.m. 作者:赵彦昌 浏览量:5042

这几天一直忙于公司生产环境服务的更新,没时间静下来,写东西,今天大早大来到公司,无聊,下午回老家,没心情工作,就闲下来想起来昨天遇到的JAVA乱码,

一种,JAVA 字符串序列化对象连接mysql 数据库 执行动作时,出现的乱码的问题,这时提醒一下,不是中文乱码, 这种情况可以在jdbc 连接时,这样写:


原来是这样写的 
jdbc:mysql://127.0.0.1/dataname?useUnicode\=true&characterEncoding\=utf-8
改成下面示例
 jdbc:mysql://127.0.0.1/dataname?
useUnicode\=true&characterEncoding\=utf-8&zeroDateTimeBehavior\=convertToNull
当然,这之前,数据库的编码 和数据表,数据表排序编码 ,数据库连接编码也都 要设置 utf8mb4 -- UTF-8 Unicode 排序:utf8mb4_unicode_ci

第二种,JAVA 在写文件时出现的乱码,这种情况大多数是和你的系统编码有关


你可以执行 


root@ubuntu248:~# locale
LANG=en_US.UTF-8
LANGUAGE=
LC_CTYPE="en_US.UTF-8"
LC_NUMERIC="en_US.UTF-8"
LC_TIME="en_US.UTF-8"
LC_COLLATE="en_US.UTF-8"
LC_MONETARY="en_US.UTF-8"
LC_MESSAGES="en_US.UTF-8"
LC_PAPER="en_US.UTF-8"
LC_NAME="en_US.UTF-8"
LC_ADDRESS="en_US.UTF-8"
LC_TELEPHONE="en_US.UTF-8"
LC_MEASUREMENT="en_US.UTF-8"
LC_IDENTIFICATION="en_US.UTF-8"
LC_ALL=


如果系统编码如上是utf-8,那你就需要java 程序在执行时得到一个叫"JAVA_OPTS" 的系统变量,变量值如下:


[root@4ea159448878 /]# echo $JAVA_OPTS
-Dfile.encoding=UTF-8 -Dsun.jnu.encoding=UTF-8
这两种情况应该可以完美解决JAVA 乱码的情况


注:本人并非JAVA开发人员,如上面编写有误,请给我留言提醒,谢谢



来说两句吧
最新评论