Java自学者论坛

 找回密码
 立即注册

手机号码,快捷登录

恭喜Java自学者论坛(https://www.javazxz.com)已经为数万Java学习者服务超过8年了!积累会员资料超过10000G+
成为本站VIP会员,下载本站10000G+会员资源,会员资料板块,购买链接:点击进入购买VIP会员

JAVA高级面试进阶训练营视频教程

Java架构师系统进阶VIP课程

分布式高可用全栈开发微服务教程Go语言视频零基础入门到精通Java架构师3期(课件+源码)
Java开发全终端实战租房项目视频教程SpringBoot2.X入门到高级使用教程大数据培训第六期全套视频教程深度学习(CNN RNN GAN)算法原理Java亿级流量电商系统视频教程
互联网架构师视频教程年薪50万Spark2.0从入门到精通年薪50万!人工智能学习路线教程年薪50万大数据入门到精通学习路线年薪50万机器学习入门到精通教程
仿小米商城类app和小程序视频教程深度学习数据分析基础到实战最新黑马javaEE2.1就业课程从 0到JVM实战高手教程MySQL入门到精通教程
查看: 499|回复: 0

secureCRT linux shell显示中文乱码 解决方法

[复制链接]
  • TA的每日心情
    奋斗
    3 天前
  • 签到天数: 789 天

    [LV.10]以坛为家III

    2049

    主题

    2107

    帖子

    72万

    积分

    管理员

    Rank: 9Rank: 9Rank: 9

    积分
    722638
    发表于 2021-4-30 12:23:02 | 显示全部楼层 |阅读模式
    引:有没有这样的经历:

    1、在shell中直接查看包含中文的文件时,出现一堆火星文,不得不下载下来window看.

     

    2、无法正常的在shell中输入中文。

     

    3、make的时候输出一堆乱码。

     

    以下是查阅各种网上包括公司内部KM得到的一些资料,通过下面的一些步骤应该就会被这些火星文困扰了。

     

    第一步:尝试修改SecureCRT上的显示配置:

     

    km上有这样一则帖子广为流传:

     

    SecureCRT的默认配置对中文支持不好。很容易出现中文乱码。即使显示出来没有乱码,将文本复制粘贴到其他windows程序中也会是乱码,或者从windows复制进SecureCRT会乱码,很不方便。这个归结起来还是字符编码的问题,需要进行以下简单设置:

     

    1. 首先进入 Option 菜单 >> Session Option 
    2. Terminal >> Emulation,在右边 Terminal下拉菜单中选择"Linux", "ANSI Color"前面打上勾。
    3. Terminal >> Appearance
    3.1 点右边的Font 按钮, 1) 选择新宋体,2) 字符集选"中文 GB2312"
    3.2 Charactor 下拉菜单中选择 "Default", 去掉"Use Unicode line drawing character"前面的勾。
    保存设置,重启SecureCRT,进入刚才配置的Session,终于可以跟烦人的乱码说BYEBYE

     

    帖子下面有人回复说显示出来的文字还是很奇怪,估计就是火星文了。。。应该是该方法还不能奏效!不过点击的人还是很多,看来遇到这个问题的人不少呵!

     

     

     

    第二步:尝试修改shell的语言环境变量

     

    2.1 语言环境是啥东东

     

        说白了,语言环境就是locale,locale就是shell运行时的语言环境, 它包括语言(Language), 地域 (Territory) 和字符集(Codeset),一般用以下变量进行综合述:

     

    1、语言符号及其分类(LC_CTYPE) 

     

    2、数字(LC_NUMERIC) 

     

    3、比较和排序习惯(LC_COLLATE) 

     

    4、时间显示格式(LC_TIME) 

     

    5、货币单位(LC_MONETARY) 

     

    6、信息主要是提示信息,错误信息,状态信息,标题,标签,按钮和菜单等(LC_MESSAGES) 

     

    7、姓名书写方式(LC_NAME) 

     

    8、地址书写方式(LC_ADDRESS) 

     

    9、电话号码书写方式(LC_TELEPHONE) 

     

    10、度量衡表达方式 (LC_MEASUREMENT) 

     

    11、默认纸张尺寸大小(LC_PAPER) 

     

    12、对locale自身包含信息的概述(LC_IDENTIFICATION)。

     

    以下是几台机器的locale的结果:

     

    game@developer_6_224_172:/data/ranklog/forestrisk> locale

     

    LANG=zh_CN.GB2312

     

    LC_CTYPE="zh_CN.GB2312"

     

    LC_NUMERIC="zh_CN.GB2312"

     

    LC_TIME="zh_CN.GB2312"

     

    LC_COLLATE="zh_CN.GB2312"

     

    LC_MONETARY="zh_CN.GB2312"

     

    LC_MESSAGES="zh_CN.GB2312"

     

    LC_PAPER="zh_CN.GB2312"

     

    LC_NAME="zh_CN.GB2312"

     

    LC_ADDRESS="zh_CN.GB2312"

     

    LC_TELEPHONE="zh_CN.GB2312"

     

    LC_MEASUREMENT="zh_CN.GB2312"

     

    LC_IDENTIFICATION="zh_CN.GB2312"

     

    LC_ALL=zh_CN.GB2312

     

    -------------------------------------------172可以显示中文

     

    developer_27_181_88:/data/ranklog/forestrisk # locale    

     

    LANG=en_US.ISO-8859-1

     

    LC_CTYPE=en_US

     

    LC_NUMERIC="en_US.ISO-8859-1"

     

    LC_TIME="en_US.ISO-8859-1"

     

    LC_COLLATE="en_US.ISO-8859-1"

     

    LC_MONETARY="en_US.ISO-8859-1"

     

    LC_MESSAGES="en_US.ISO-8859-1"

     

    LC_PAPER="en_US.ISO-8859-1"

     

    LC_NAME="en_US.ISO-8859-1"

     

    LC_ADDRESS="en_US.ISO-8859-1"

     

    LC_TELEPHONE="en_US.ISO-8859-1"

     

    LC_MEASUREMENT="en_US.ISO-8859-1"

     

    LC_IDENTIFICATION="en_US.ISO-8859-1"

     

    LC_ALL=

     

    -----------------------------------------------可以显示中文

     

    game@developer_6_224_41:/data> locale

     

    LANG=en_US.UTF-8

     

    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=

     

    ----------------------------------------------不能显示中文,也就是中文变成火星文???

     

    zh_CN.GB2312到底是在说什么? 

     

    一个locale的书写格式为: 语言[_地域[.字符集]]。所以说呢,locale总是和一定的字符集相联系的。

     

    1、我说中文,身处中华人民共和国,使用国标2312字符集来表达字符。zh_CN.GB2312=中文_中华人民共和国+国标2312字符集。 

     

    2、我说英文,身处大不列颠,使用ISO-8859-1字符集来表达字符。 en_GB.ISO-8859-1=英文_大不列颠.ISO-8859-1字符集

     

    设定locale就是设定12大类的locale分类属性,即12个LC_*。除了这12个变量可以设定以外,为了简便起见,还有两个变量:LC_ALL和LANG。它们之间有一个优先级的关系:LC_ALL > LC_* >LANG。可以这么说,LC_ALL是最上级设定或者强制设定,而LANG是默认设定值。 
    1、如果你设定了LC_ALL=zh_CN.UTF-8,那么不管LC_*和LANG设定成什么值,它们都会被强制服从LC_ALL的设定,成为 zh_CN.UTF-8。 
    2、假如你设定了LANG=zh_CN.UTF-8,而其他的LC_*=en_US.UTF-8,并且没有设定LC_ALL的话,那么系统的locale设定以LC_*=en_US.UTF-8。 
    3、假如你设定了LANG=zh_CN.UTF-8,而其他的LC_*,和LC_ALL均未设定的话,系统会将LC_*设定成默认值,也就是LANG的值zh_CN.UTF-8。 
    4、假如你设定了LANG=zh_CN.UTF-8,而其他的LC_CTYPE=en_US.UTF-8,其他的LC_*,和LC_ALL均未设定的话,那么系统的locale设定将是:LC_CTYPE=en_US.UTF-8,其余的 LC_COLLATE,LC_MESSAGES等等均会采用默认值,也就是 LANG的值,也就是LC_COLLATE=LC_MESSAGES=……= LC_PAPER=LANG=zh_CN.UTF-8。 

     

    2.2怎么设置locale?

     

    其实设置locale很简单,直接在shell中敲入:

     

    export LC_ALL="zh_CN.GBK"

     

    export LANG="zh_CN.GBK"

     

    两个命令就搞定了,但是,我关了shell,下次又开起来的时候又显示火星文了。。。

     

    2.3linux环境变量生存周期及设置方法

     

    按变量的生存周期来划分,Linux变量可分为两类:

     

    1、临时的使用export命令声明即可,变量在关闭shell时失效直接运行export命令定义变量「只对当前shell(BASH)有效(临时的)」

     

       在shell的命令行下直接使用[export 变量名=变量值] 定义变量,该变量只在当前的shell(BASH)或其子shell(BASH)下是有效的,shell关闭了,变量也就失效了,再打开新shell时就没有了。

     

    2永久的需要修改配置文件,变量永久生效。

     

    针对所有用户的方案.

     

        在/etc/profile文件中添加变量「对所有用户生效(永久的)」

     

      用VI在文件/etc/profile文件中增加变量,该变量将会对Linux下所有用户有效,并且是“永久的”。

     

      例如:编辑/etc/profile文件,添加 LC_ALL ,LANG变量

     

        echo "export LC_ALL=zh_CN.GB2312">>/etc/profile

     

         echo "export LANG=zh_CN.GB2312">>/etc/profile

     

      注:以root身份修改,修改文件后要想马上生效还要运行# source /etc/profile不然只能在下次重进此用户时生效。

     

    针对某个用户的方案.

     

        在用户目录下的。bash_profile文件中增加变量「对单一用户生效(永久的)」

     

      用VI在用户目录下的。bash_profile文件中增加变量,改变量仅会对当前用户有效,并且是“永久的”。

     

      例如:编辑xx用户目录(/home/xx)下的.bash_profile文件,这个文件可能不存在的。

     

      vi /home/xx/.bash_profile

     

      添加如下内容:

     

      export LC_ALL=zh_CN.GB2312

     

        export LANG=zh_CN.GB2312

     

        最后 $ source /home/xx/.bash_profile

     

    第三步:搞定XML显示中文乱码

     

    本以为神马都可以显示为中文了,最后还是发现一些设定utf-8编码格式的xml等文件显示火星文:

     

    <?xml version="1.0" encoding="UTF-8" standalone="yes"?>

     

    查了下网上的材料,用以下方法搞定之:

     

    1、vi的时候敲入命令:

     

    set encoding=utf-8 termencoding=gbk

     

    set fileencodings=gbk,utf-8

     

    2、设置到vim的配置文件中,注,该配置文件不一定存在,每个用户一个配置,配置只对该用户生效

     

    echo "set termencoding=gbk" >> ~/.vimrc

     

    echo "set encoding=utf-8">>~/.vimrc

     

    echo "set fileencoding=utf-8">>~/.vimrc

     

    -------------------------------------终极配置脚本-------------------------------------

    总结以上,为方便使用,用脚本setzhlang.sh +x root执行就可以解决乱码问题了,就可以和烦人的火星文说( ^_^ )/~~拜拜啦!

    Setzhlang.sh 

     

    !/bin/bash

     

    echo "export LC_ALL=zh_CN.GB2312">>/etc/profile
    echo "export LANG=zh_CN.GB2312">>/etc/profile

     

    source '/etc/profile' 

     

    echo "set termencoding=gbk" >> ~/.vimrc

     

    echo "set encoding=utf-8">>~/.vimrc

     

    echo "set fileencoding=utf-8">>~/.vimrc

     

    哎...今天够累的,签到来了1...
    回复

    使用道具 举报

    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    QQ|手机版|小黑屋|Java自学者论坛 ( 声明:本站文章及资料整理自互联网,用于Java自学者交流学习使用,对资料版权不负任何法律责任,若有侵权请及时联系客服屏蔽删除 )

    GMT+8, 2024-9-9 19:19 , Processed in 0.168785 second(s), 29 queries .

    Powered by Discuz! X3.4

    Copyright © 2001-2021, Tencent Cloud.

    快速回复 返回顶部 返回列表