Liunx服务器下的乱码问题

今天发现我新配置的Linux服务器下,我读取本地文件会出现乱码问题。

由于是Java,我就以Java为例子,说说。


我们通常的乱码问题,都是项目编码问题,一般本地运行没有问题的话,基本上和这个无关。

出现乱码后,我们先别紧张,打印一下 System.getProperties(),他会给我们返回一Json数据。


我的打印出来如下:

{java.runtime.name=Java(TM) SE Runtime Environment, sun.boot.library.path=/usr/java/jdk1.7.0_21/jre/lib/i386, java.vm.version=23.21-b01, java.vm.vendor=Oracle Corporation, java.vendor.url=http://java.oracle.com/, path.separator=:, java.vm.name=Java HotSpot(TM) Client VM, file.encoding.pkg=sun.io, user.country=US, sun.java.launcher=SUN_STANDARD, sun.os.patch.level=unknown, java.vm.specification.name=Java Virtual Machine Specification, user.dir=/var/java_crawler, java.runtime.version=1.7.0_21-b11, java.awt.graphicsenv=sun.awt.X11GraphicsEnvironment, java.endorsed.dirs=/usr/java/jdk1.7.0_21/jre/lib/endorsed, os.arch=i386, java.io.tmpdir=/tmp, line.separator=
, java.vm.specification.vendor=Oracle Corporation, os.name=Linux, sun.jnu.encoding=UTF-8, java.library.path=/usr/java/packages/lib/i386:/lib:/usr/lib, java.specification.name=Java Platform API Specification, java.class.version=51.0, sun.management.compiler=HotSpot Client Compiler, os.version=2.6.18-128.1.16.el5, user.home=/root, user.timezone=, java.awt.printerjob=sun.print.PSPrinterJob, file.encoding=UTF-8, java.specification.version=1.7, java.class.path=.:/usr/java/jdk1.7.0_21/jre/lib/rt.jar:/usr/java/jdk1.7.0_21/lib/dt.jar:/usr/java/jdk1.7.0_21/lib/tools.jar, user.name=root, java.vm.specification.version=1.7, sun.java.command=Main, java.home=/usr/java/jdk1.7.0_21/jre, sun.arch.data.model=32, user.language=en, java.specification.vendor=Oracle Corporation, awt.toolkit=sun.awt.X11.XToolkit, java.vm.info=mixed mode, sharing, java.version=1.7.0_21, java.ext.dirs=/usr/java/jdk1.7.0_21/jre/lib/ext:/usr/java/packages/lib/ext, sun.boot.class.path=/usr/java/jdk1.7.0_21/jre/lib/resources.jar:/usr/java/jdk1.7.0_21/jre/lib/rt.jar:/usr/java/jdk1.7.0_21/jre/lib/sunrsasign.jar:/usr/java/jdk1.7.0_21/jre/lib/jsse.jar:/usr/java/jdk1.7.0_21/jre/lib/jce.jar:/usr/java/jdk1.7.0_21/jre/lib/charsets.jar:/usr/java/jdk1.7.0_21/jre/lib/jfr.jar:/usr/java/jdk1.7.0_21/jre/classes, java.vendor=Oracle Corporation, file.separator=/, java.vendor.url.bug=http://bugreport.sun.com/bugreport/, sun.io.unicode.encoding=UnicodeLittle, sun.cpu.endian=little, sun.cpu.isalist=}


我们可以看到 

sun.jnu.encoding=UTF-8

file.encoding=UTF-8

user.country=US


这里面的内容我们可以在启动的时候通过 java -Dxxx进行设置

日入我们设置jvm编码为gbk

java -Dsun.jnu.encoding=gbk


一般这样设置,就没问题了。


还有就是数据库乱码。这通常都是我们的数据库连接编码设置问题,或者服务器上的数据库配置编码问题。

解决方法如下:


vi /etc/my.cnf 

default-character-set=utf8
[mysqld_safe]
default-character-set=utf8


检查数据库链接字符串,是否为utf8


最崩溃的就是乱码后也找不到问题。

我在控制台打印了两个长度相同内容不同的Unicode MD5编码。居然打印出来两个相同的东西。

代码里面都乱码了?


不用着急,这个通常是我们Linux系统编码设置的问题。

我们只需要设置下系统编码就可以了。

代码如下:

[root@localhost admin]# vi /etc/sysconfig/i18n
LANG="en_US.UTF-8"
SYSFONT="latarcyrheb-sun16"

不过因为是修改整个系统的环境变量,所以需谨慎,修改前最好先备份一下吧


修改完成后也不用重启Liunx,直接重启下你的应用。

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值