那些系统管理员以及开发者,进行Linux日志处理之际,会遭遇显示中文乱码这种情况红旗 linux,这是实际存在的问题,许多人都会碰到。通常而言,这并非日志内容本身存在错误,而是系统环境、应用程序编码方面的配置,还有查看工具之间,出现了不匹配这种情形,进而导致如此紊乱的现象。要是能够理解乱码形成的原因,并且掌握把问题进行有效解决的方式方法等等,那么就能够极大程度地提升运维效率,以及在问题排查方面的能力。

Linux日志乱码的根本原因是什么

日志呈现出乱码状况,最为关键的缘由乃是字符编码并非一致。Linux系统自体,生成日志的应用程序,以及你用以查看日志的终端或者工具,这三者务必运用相同的字符集,如此中文方可正确展现。常见的对中文予以支持的编码涵盖UTF -- 8以及GBK。

linux日志中文乱码_linux日志中文乱码_linux日志常见报错

若是应用程序于写入日志之际采用了GBK编码,然而你的终端环境变量LANG被设置成en_US.UTF-8,那么借由cat或者tail命令去查看之时,中文便会呈现为乱码。另外,某些较为老旧的程序或者脚本有可能默认运用非UTF-8编码,这同样是乱码的常见源头。

如何检查当前系统的语言和编码环境

将最初用于诊断乱码的那一步骤设定为对系统环境展开检查。于终端之内键入locale这个命令,如此一来便会呈现出一连串和环境语言以及编码存在关联的变量。你应当着重留意LANG以及LC_ALL的值哪些能够决定系统以及命令行工具的默认编码。

linux日志常见报错_linux日志中文乱码_linux日志中文乱码

比如说,LANG=zh_CN.UTF-8意味着系统所采用的语言是简体中文,其编码形式为UTF-8。要是在此处呈现的是C或者POSIX,又或者是那种不支持中文的编码情况,那么出现显示乱码这样的状况便能被预料到。与此同时,要去检查你所使用的SSH客户端或者诸如Xshell、SecureCRT、iTerm2这类终端模拟器的编码设置,保证其和服务器端维持一致。

怎么查看文件的真实编码格式

你要确定日志文件自身在尝试转换之前究竟是什么编码,那是可以运用file命令去做初步判断的,就像file syslog.log这样的操作。不过呢,file命令所做的判断有的时候是不够精准的。

更建议选用enca或者uchardet这样专门化的工具,举例来说,在安装uchardet之后,运行uchardet syslog.loglinux日志中文乱码,它会径直输出最为有可能的编码格式,像“UTF-8”或者“GB18030”,精确知晓文件编码,是后续实施正确转换的根基,能够防止因错误判断从而致使的“越转越乱”现象发生。

有哪些命令可以转换日志文件的编码

要是明确日志文件编码跟你的环境不相匹配,那就得开展转换。“iconv”命令属于Linux当中极为强大的编码转换工具。它的基本使用方法是“iconv -f原编码 -t目标编码 输入文件 -o输出文件”。

比如呀,把一个采用GBK编码的文件转变成UTF-8,所使用的命令是iconv -f GBK -t UTF-8 log_gbk.log -o log_utf8.log。在进行转换之前呢,一定要做好文件的备份工作。除此之外呢,enca命令同样是具备转换功能的,它能够自动检测编码然后进行转换linux中文乱码,其命令就像enca -L zh_CN -x UTF-8 filename这样,可以自动识别中文编码并且转变成UTF-8 。

linux日志常见报错_linux日志中文乱码_linux日志中文乱码

如何永久设置系统环境避免乱码

仅是临时去修改环境变量,仅仅能够解决当下会话所存在的问题,若要做到永久防止出现乱码现象linux日志中文乱码,那就得修改系统设定或者用户的配置文件,面向全局的配置,可循例编辑/etc/locale.conf(在某些系统当中是/etc/default/locale或者/etc/sysconfig/i18n),同时把LANG设定为zh_CN.UTF-8

就单个用户而言,可以于其家目录的.bashrc文件里添加export LANG=zh_CN.UTF-8,还能在.profile文件当中添加export LC_ALL=zh_CN.UTF-8,之后重新进行登录,或者执行source命令让其生效。与此同时,要保证服务器上安装了完整的中文字体包,像fonts-wqy-microhei之类的 。

使用哪些工具查看日志能减少乱码问题

选择恰当的查看工具同样能够有效地避免乱码情况出现,除了系统本来就有的catlesstail外,一些更为强大的工具给予了更好的编码支持,比如说,vim编辑器在打开文件之后能够运用:set fileencoding=utf-8来强行按照特定编码再次加载文件。

关于实时跟踪日志,multitail工具可支持指定编码参数。于图形界面里,VS CodeSublime Text等现代编辑器常常拥有强大的自动编码检测功能,能够以很大概率正确地打开文件。在对编码不确定之际,优先运用这些编辑器展开查看以及初步判断。

在你日常所从事的工作当中,最为频繁碰到的究竟是哪一种特定的服务或者应用,像是Docker容器日志、某个Java应用日志之类所引发的中文出现乱码的状况,而你又是采用怎样的方式去解决的呢,欢迎于评论区之中分享你自身的实战经验,要是感觉本文具备有助于你的作用,请进行点赞并且分享给更多有可能遭遇此问题的同事。

Tagged:
Author

这篇优质的内容由TA贡献而来

刘遄

《Linux就该这么学》书籍作者,RHCA认证架构师,教育学(计算机专业硕士)。

发表回复