引:有没有这样的经历:

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

secureCRT linux shell显示中文乱码 解决方法的更多相关文章

  1. Linux显示中文乱码解决方法

    vi /etc/sysconfig/i18n 将内容改为 LANG="zh_CN.GB18030" LANGUAGE="zh_CN.GB18030:zh_CN.GB231 ...

  2. 两种解决Qt5显示中文乱码的方法(使用QStringLiteral和#pragma execution_character_set("utf-8")两种方法)

    升级到Qt5.X之后,原先解决的Qt显示中文乱码的方法突然不适用了,找了很多方式来解决这个问题第一种:在公司代码里看到的方法,先将对应的cpp文件用windows自带的记事本打开,另存为UTF-8格式 ...

  3. python cmd 窗口 中文乱码 解决方法 (附:打印不同颜色)

    python cmd 窗口 中文乱码 解决方法 (附:打印不同颜色) 前言 在 python 开发中,有时候想通过cmd窗口来和用户交互,比如显示信息之类的,会比自己创建 GUI 来的方便,但是随之而 ...

  4. php mysql 中文乱码解决方法

    本文章向码农们介绍php mysql 中文乱码解决方法,对码农们非常实用,需要的码农可以参考一下. 从MySQL 4.1开始引入多语言的支持,但是用PHP插入的中文会出现乱码.无论用什么编码也不行 解 ...

  5. [转]mysql导入导出数据中文乱码解决方法小结

    本文章总结了mysql导入导出数据中文乱码解决方法,出现中文乱码一般情况是导入导入时编码的设置问题,我们只要把编码调整一致即可解决此方法,下面是搜索到的一些方法总结,方便需要的朋友. linux系统中 ...

  6. Zxing中文乱码解决方法

    Zxing中文乱码解决方法总结 尝试过非常多方法  最后发现此方法解决的乱码最多....... 在百度搜索二维码图片 经过前2页的測试  除开一张图之外  其余都能扫描出结果 假设大家有更好的解决方法 ...

  7. ajax()函数传值中文乱码解决方法介绍

    jquery的ajax()函数传值中文乱码解决方法介绍,需要的朋友可以参考下 复制代码 代码如下: $.ajax({ dataType : ‘json',type : ‘POST',url : ‘ht ...

  8. centos7 中文乱码解决方法

    centos7 中文乱码解决方法 标签(空格分隔): centos7 1.查看安装中文包: 查看系统是否安装中文语言包 (列出所有可用的公共语言环境的名称,包含有zh_CN) # locale -a ...

  9. jquery的ajax()函数传值中文乱码解决方法介绍

    jquery的ajax()函数传值中文乱码解决方法介绍,需要的朋友可以参考下 代码如下: $.ajax({ dataType : ‘json', type : ‘POST', url : ‘http: ...

随机推荐

  1. Laravel之任务调度

    一.基本简介 任务调度定义在app/Console/Kernel.php 文件的schedule 方法中,该方法中已经包含了一个示例.你可以自由地添加你需要的调度任务到Schedule 对象. 二.开 ...

  2. Hdu 2243 考研路茫茫——单词情结 (AC自己主动机+矩阵)

    哎哟喂.中文题. . .不说题意了. 首先做过POJ 2778能够知道AC自己主动机是能够求出长度为L的串中不含病毒串的数量的. POJ 2778的大概思路就是先用全部给的病毒串建一个AC自己主动机. ...

  3. Android实现炫酷SVG动画效果

    svg是眼下十分流行的图像文件格式了,svg严格来说应该是一种开放标准的矢量图形语言,使用svg格式我们能够直接用代码来描画图像,能够用不论什么文字处理工具打开svg图像.通过改变部分代码来使图像具有 ...

  4. 【Android开发-6】了解内情,我们须要一些调试和測试手段

    前言:人生不可能十全十美,总会有些遗憾存在,经历过遗憾,我们才懂的什么是生活. 程序也一样.追求完美,就必定会有经历bug存在的时候. 经历过不断的bug磨练.我们技术才会不断的成长.对于调试bug, ...

  5. BufferedReader 使用 readLine() 读取 UTF-8 格式的文本第一行第一个字符是空字符的解决办法

    BufferedReader br = new BufferedReader(new InputStreamReader(new FileInputStream(ksmgVo.getFiledata( ...

  6. elasticsearch 单节点实现

    一.安装java环境,这么不说了,一般用源码安装,配置好环境变量 二.新建es用户和组,es不能用root启动 三.下载需要的稳定版es 四.解压安装es .zip /opt/app/ es / 五. ...

  7. Hadoop 中的 ArrayWritable

    虽然ArrayWritable不是接口,但貌似必须要子类去extends ArrayWritable,不能直接用ArrayWriable 否则会报下面的错误?(不是很确定) java.lang.Exc ...

  8. 【拆分版】Docker-compose构建Elasticsearch 7.1.0集群

    写在前边 搞了两三天了,一直有个问题困扰着我,ES集群中配置怎么能正确映射到主机上,这边经常报ClusterFormationFailureHelper master not discovered o ...

  9. java 原生定时执行程序(ScheduledExecutorService)

    package ThreadPoolTest; import java.util.Date; import java.util.concurrent.*; public class Main { pu ...

  10. 基于JT/T 1078协议设计和开发部标视频服务器

    交通部与2016年10月份推出了JT/T 1078-2016标准,全称是<道路运输车辆卫星定位系统视频通信协议>.该标准将改变以往两客一危车辆的视频监控设备通信协议都是设备厂商私有协议的局 ...