关于win上文本和linux上文本的编码问题

Windows的默认编码为GBK,Linux的默认编码为UTF-8
[root@node1 ~]$ cat -A filename 就可以看到windows下的断元字符 ^M

闲来无聊查找了以下几种转换编码字符集的方法

1 dos2unix filename          
2 sed -i 's/^M//g' filename
3 vim filename
:1,$ s/^M//g
4 cat filename |tr -d ‘/r’ > newfile      ## ^M 可用 /r 代替

^M 输入方法: ctrl+V ,ctrl+M

locale命令
程序运行使用一套语言需要有字符集(数据)和字体(显示),Locale是根据计算机用户所使用的语言(Language),所在国家或者地域(Territory),以及当地的文化传统字符集(Codeset)所定义的一个软件运行时的语言环境。

完全的locale表达方式是 [语言[_地域][.字符集] [@修正值]。
zh_CN.GB2312=中文_中华人民共和国+国标2312字符集。

centos7中

[root@node1 ~]$ locale
locale     localectl  localedef  
[root@node1 ~]$ localectl 
list-keymaps    list-locales    set-keymap      set-locale      set-x11-keymap  status          
[root@node1 ~]$ localectl set-locale L
LANG=               LC_COLLATE=         LC_MEASUREMENT=     LC_NAME=            LC_TELEPHONE=
LANGUAGE=           LC_CTYPE=           LC_MESSAGES=        LC_NUMERIC=         LC_TIME=
LC_ADDRESS=         LC_IDENTIFICATION=  LC_MONETARY=        LC_PAPER=   

centos6中查看现有语言环境(查看可用语言环境 加选项-a)

[root@meng ~]$ locale
LANG=en_US.UTF-8
LC_CTYPE="en_US.UTF-8"     ## 语言符号及其分类(LC_CTYPE)
LC_NUMERIC="en_US.UTF-8"    ##  数字(LC_NUMERIC)
LC_TIME="en_US.UTF-8"   ## 时间显示格式(LC_TIME)
LC_COLLATE="en_US.UTF-8"    ##  比较和排序习惯(LC_COLLATE)
LC_MONETARY="en_US.UTF-8"    ##  货币单位(LC_MONETARY)
LC_MESSAGES="en_US.UTF-8"	# 主要是提示、错误、状态信息, 标题, 标签, 按钮和菜单等(LC_MESSAGES)
LC_PAPER="en_US.UTF-8"    # 默认纸张尺寸大小(LC_PAPER)
LC_NAME="en_US.UTF-8"    # 姓名书写方式(LC_NAME)
LC_ADDRESS="en_US.UTF-8"    # 地址书写方式(LC_ADDRESS)
LC_TELEPHONE="en_US.UTF-8"    # 电话号码书写方式(LC_TELEPHONE)
LC_MEASUREMENT="en_US.UTF-8"    # 度量衡表达方式(LC_MEASUREMENT)
LC_IDENTIFICATION="en_US.UTF-8"    # 对locale自身包含信息的概述(LC_IDENTIFICATION)
LC_ALL=

设定locale就是设定12大类的locale分类属性,即 12个LC_。除了这12个变量可以设定以外,为了简便起见,还有两个变量:LC_ALL和LANG以及久远前的LANGUAGE(设置应用程序的界面语言)
它们之间有一个优先级的关系:LC_ALL > LC_
> LANG
可以这么说,LC_ALL是最上级设定或者强制设定,可以管所有的locale,而LANG是默认设定值。

修改/etc/sysconfig/i18n文件,LANG="zh_CN.UTF-8"或LANG=“zh_CN.GBK”
普通用户修改 ~/.profile 添加 export LANG zh_CN.GBK
或者临时生效 export LC_ALL=zh_CN.GBK

三、安装中文字符集
1、安装所有与中文支持相关的包

[root@meng ~]$ yum -y groupinstall chinese-support

2、修改字符编码配置文件

[root@meng ~]$ vim /etc/sysconfig/i18n
LANG="zh_CN.UTF-8"
SUPPORTED="zh_CN:zh:en_US.UTF-8:en_US:en:zh_CN.GB18030"
SYSFONT="latarcyrheb-sun16"
#LINUXTYPE=targeted

LANG是language的简称,决定系统的默认语言,即系统的菜单、程序的工具栏语言、输入法默认语言等。
SYSFONT是system font的简称,决定系统默认用哪一种字体。
SUPPORTED变量决 定系统支持的语言,即系统能够显示的语言。

需要说明的是,由于计算机起源于英语国家,因此,不管你把这些变量设置成什么,英语总是默认支持的,而且不管用什么字体,英文字体总包含在其中。

临时调整终端乱码现象:
[root@meng ~]$ LANG="" # LANG变量被清空后,系统就默认用英语
或export LANG=""
但这种设置只是临时改变了LANG这个bash变量而已。当退出重新登录或者切换到其他字符终端后就无效了。
永久解决的需要修改上面的/etc/sysconfig/i18n配置文件

最好不要把LANG变量简单的清空,因为这个变量不仅在字符模式下用到,在图形界面下也用到,简单清空在字符模式下确实不会有问题,但在图形界面下,却会造成中文无法正常显示的情况,在过去Redhat系列的版本中i18n文件中还有一个叫LANGUAGE的变量,专门控制图形界面下的语言设置,现在的FC系列中已经把这两个变量整合成一个变量了。

Windows下编辑的中文,在Linux下显示为乱码,解决方法

[root@node1 ~]$ cat /etc/sysconfig/i18n
LANG="en_US.UTF-8"
SYSFONT="latarcyrheb-sun16"
	修改为:
	LANG="zh_CN.GBK"
	SUPPORTED="zh_CN.UTF-8:zh_CN:zh"
	SYSFONT="latarcyrheb-sun16"
	或者:
[root@node1 ~]$ vim /etc/profile
export LC_ALL="zh_CN.GBK"
export LANG="zh_CN.GBK"
发布了8 篇原创文章 · 获赞 6 · 访问量 2148

猜你喜欢

转载自blog.csdn.net/qq_36150038/article/details/103537461