解决CentOS7中文乱码(包括Tomcat日志乱码)问题
Linux系统中文语言乱码,是很多小伙伴在开始接触Linux时经常遇到的问题,而且当我们将已在Wndows部署好的项目搬到Linux上运行,Tomcat的输出日志中文全为乱码(在Windows上正常),看着非常心塞,那么我们应该怎么解决呢?

系统中文乱码

Tomcat输出日志中文乱码
系统环境
- CentOS 7.0 64位
- jdk-8u11-linux-x64.
- apache-tomcat-8.5.16
解决步骤:
1.安装中文语言包
先查看系统是否有安装中文语言包
# locale -a (列出所有可用的公共语言环境的名称)

若发现以上几项,说明系统已安装中文语言包,无需再安装,那这几项代表什么意思呢?
{语言代号}_{国家代号}.{字符集}
zh是中文的代号、CN是中国的代号、gb18030,gb2312,utf8是语言字符集
那么每一项可以通俗理解为 “你是说中文的,你在中国,语言字符集是gb18030/gb2312/utf8”
如果没有发现以上几项,则手动安装中文语言包
# yum install kde-l10n-Chinese (大概11M)
2.修改i18n国际化和locale.conf本土化配置文件
在修改配置文件之前,我们先看看当前系统语言环境
# locale
("en_US.UTF-8"按照上面的内容可以理解为“你说英语,你在美国,语言字符集为UTF-8”)
每项的意思分别为 :
LANG:当前系统的语言
LC_CTYPE:语言符号及其分类
LC_NUMERIC:数字
LC_COLLATE:比较和排序习惯
LC_TIME:时间显示格式
LC_MONETARY:货币单位
LC_MESSAGES:信息主要是提示信息,错误信息, 状态信息, 标题, 标签, 按钮和菜单等
LC_NAME:姓名书写方式
LC_ADDRESS:地址书写方式
LC_TELEPHONE:电话号码书写方式
LC_MEASUREMENT:度量衡表达方式
LC_PAPER:默认纸张尺寸大小
LC_IDENTIFICATION:对locale自身包含信息的概述
LC_ALL:优先级最高变量,若设置了此变量,所有LC_* 和LANG变量会强制跟随它的值
我们看到虽然安装了中文语言包但本机的语言环境并不是中文,先修改i18n配置文件
# vim /etc/sysconfig/i18n
添加如下两行代码
LANG="zh_CN.UTF-8"
LC_ALL="zh_CN.UTF-8"

# source /etc/sysconfig/i18n
再修改 locale.cnf配置文件
# vim /etc/locale.conf
LANG="zh_CN.UTF-8"

# source /etc/locale.conf
重启系统
# reboot
3.设置终端连接编码
文件->打开->选中会话->右键->属性->终端
将编码改为 UTF-8

重新连接,再查看当前系统语言环境
# locale

发现系统语言环境已经成功改为 “zh_CN.UTF-8”
再次尝试编辑中文
# vim 你是猪吗

# ls

SUCCESS!至此,系统中文乱码问题已解决。
4.解决Tomcat输出日志乱码
既然系统中文乱码已经解决了,那么Tomcat输出日志中文乱码会不会也解决了呢?
我们现在看看Tomcat输出日志
进入Tomcat目录
# cd $CATALINA_HOME
# tail -f ./logs/catalina.out

很遗憾,Tomcat日志中文还是乱码。
分析:既然系统已经不会出现中文,证明系统语言环境是正常的,但是Tomcat日志还会出现中文乱码,说明是Tomcat内部的问题,网上查了一些资料,知道是JVM(Java Virtual Machine)
java虚拟机所用的字符集与系统所用的字符集不一致造成的,知道原因,问题就好解决了,可以通过配置JVM的启动参数来达到修改JVM所使用字符集的目的。
# ls -l ./bin/

找到 daemon.sh 和 catalina.sh 分别加入以下代码:
JAVA_OPTS="$JAVA_OPTS -Djavax.servlet.request.encoding=UTF-8 -Dfile.encoding=UTF-8 -Duser.language=zh_CN -Dsun.jnu.encoding=UTF-8"
# vim ./bin/daemon.sh

# vim ./bin/catalina.sh

保存退出,重启Tomcat
# ./bin/shutdown.sh
# ./bin/startup.sh
现在再查看输出日志
# tail -f ./logs/catalina.out
向服务器发一次请求

Tomcat输出日志不在乱码。
end! (*^-^*)
解决CentOS7中文乱码(包括Tomcat日志乱码)问题的更多相关文章
- 提升Idea启动速度与Tomcat日志乱码问题
提升Idea启动速度与Tomcat日志乱码问题 前言 由于重装了一次Idea,所以有些设置时间就忘了,在此做个记录,以便以后忘记后可以来翻阅 Idea启动速度 一.将Idea所在的 安装文件夹 在wi ...
- 解决IntelliJ IDEA控制台乱码问题[包含程序运行时的log4j日志以及tomcat日志乱码]
这里使用的IntelliJ IDEA版本为[IntelliJ IDEA 14.1.4]: 一.控制台打印的程序运行时的log4j日志中包含中文乱码 在IDEA安装目录的bin目录下找到名为" ...
- linux下 tomcat 日志乱码/中文链接404
1 日志乱码: JDK引用的设置 Java引用参数添加”-Dfile.encoding=UTF-8 -Dsun.jnu.encoding=UTF-8” 将上面参数添加到Catalina.sh中JAVA ...
- Tomcat日志乱码解决方法
将配置文件logging.properties所有含有UTF-8的删除
- IDEA配置tomcat日志乱码
第一步(tomcat7/8) tomcat:找到tomcat文件夹下的conf文件夹,去修改里面的logging.properties文件 两种修改方式(第一种方法不行再用第二种): 将文件中的5个U ...
- 解决websphere在aix linux下日志乱码
管理控制台--->服务器--->应用程序服务器--->server1--->java和进程管理--->进程定义--->java虚拟机--->将通用jvm参数设 ...
- 【已解决】关于IDEA中 Tomcat 控制台打印日志中文乱码的解决
在 Idea 上面使用 Tomcat 时,发现控制台打印信息的时候,出行中文乱码问题; 可以通过以下几种解决办法 1:在-Dfile.encoding=UTF-8 在vm中设置编码方式 2.然后从Fi ...
- linux服务器上tomcat日志中的中文乱码
转: 修改tomcat应用日志默认编码格式 前言 今天开发跟我说tomcat日志中的中文不能正常显示,根据以往的经验,我觉得可能跟服务器的编码有关,于是尝试各种方法,但还是没能解决问题. 后来我突然想 ...
- gedit 没有preference项,使preference回归,并用命令行设置行号,解决centos7下中文乱码,text wrapping等问题
1. 最简单的,使preference选项回来: gsettings set org.gnome.settings-daemon.plugins.xsettings overrides '@a{sv} ...
随机推荐
- java集合(2)- java中HashMap详解
java中HashMap详解 基于哈希表的 Map 接口的实现.此实现提供所有可选的映射操作,并允许使用 null 值和 null 键.(除了非同步和允许使用 null 之外,HashMap 类与 H ...
- Java反射机制剖析(三)-简单谈谈动态代理
通过Java反射机制剖析(一)和Java反射机制剖析(二)的学习,已经对反射有了一定的了解,这一篇通过动态代理的例子来进一步学习反射机制. 1. 代理模式 代理模式就是为其他对象提供一种代理来 ...
- java中为什么实体类需要实现序列化
当客户端访问某个能开启会话功能的资源,web服务器就会创建一个HTTPSession对象,每个HTTPSession对象都会占用一定的内存,如果在同一个时间段内访问的用户太多,就会消耗大量的服务器内存 ...
- Android学习探索之App多渠道打包及动态添加修改资源属性
前言: 关于Android渠道打包是一个比较老的话题,今天主要记录总结一下多渠道打包以及如果动态配置修改一些资源属性.今天以公司实际需求为例进行演示,由于项目复用很多公共的业务组件,而且业务组件之间的 ...
- Yii2中限制访问某控制器的IP(IP白名单)
有关Yii2.0鉴权之访问控制过滤器参考这篇文章 http://www.yiiframework.com/doc-2.0/guide-security-authorization.html 这里主要 ...
- JavaScript中for循环的使用详解
or循环是循环最紧凑的形式,并包含有以下三个重要部分组成: 循环初始化计数器的初始值.初始化语句执行循环开始之前. 测试语句,将测试如果给定的条件是真还是假.如果条件为真,那么将要执行的循环中给定的代 ...
- angularJS loading 载入画面
在请求网络的时候,显示loading画面 1. 使用http的interceptor,截断处理所有的http请求和响应,以及错误.在request的时候设置$rootScope.loading=Tru ...
- python 打印文件里的内容
>>> import os >>> os.chdir ('e:/')>>> data=open('text.txt')>>> f ...
- MFC简单绘制安卓机器人
原始日期:2014-03-29 20:35 众所周知,google的安卓机器人形象十分经典,包括眼睛的位置,胳膊以及天线的位置都是有固定位置和比例的,而且是最恰当的,看起来最美.而微软基础类库MFC绘 ...
- CoolBlog开发笔记第2课:搭建开发环境
教程目录 1.1 CoolBlog开发笔记第1课:项目分析 前言 今天是CoolBlog开发笔记的第2课,我们将要讲解的是开发环境的搭建.俗话说"工欲善其事必先利其器",Djang ...