Linux字符集及乱码处理

1、字符(Character)是各种文字和符号的总称,包括各国家文字、标点符号、图形符号、数字等。字符集(Character set)是多个字符的集合,字符集种类较多,每个字符集包含的字符个数不同,常见字符集名称:ASCII字符集、GB2312字符集、BIG5字符集、 GB18030字符集、Unicode字符集等

  1. 字符集在系统中体现形式是一个环境变量,查看当前系统终端采用的字符集的方式

[root@localhost ~]# echo $LANG            #LANG为字符集的环境变量名称

en_US.UTF-8

[root@localhost ~]# env|grep LANG        #env命令查看系统的环境变量

LANG=en_US.UTF-8

[root@localhost ~]# export|grep LANG    #export命令用于将shell变量或函数输出为环境变量

declare -x LANG="en_US.UTF-8"

[root@localhost ~]# locale            #Get locale-specific information 列出当前区域设置环境LANG=en_US.UTF-8                #指定所有与locale有关的变量的默认值

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=

LC_CTYPE(字符辨识编码)表示这个系统的系统现在使用的字符集是en_US.UTF-8

  1. 修改字符集的方式

1)、直接设置变量的方式修改,命令如下两条命令:

[root@localhost ~]# LANG=xxx 或者 export LANG=xxx;

[root@localhost ~]# LC_ALL="xxx" 或者 export LC_ALL="xxx";

注:xxx为欲修改为的字符集

查看标准的字符集的方法,locale –a命令,常用的有zh_CN.GB2312、zh_CN.GB18030或者zh_CN.UTF-8、en_US.UTF-8等

但是上述修改方式只会在当前shell中生效,新建shell此环境变量消失。

故平时登录系统执行"LANG= "这个命令的时候显示的就没有乱码的缘故,意思就是取消了字符集的显示,取消字符集还可以执行[root@david ~]# unset LANG这个命令。

2)、修改文件方式,通过修改/etc/sysconfig/i18n文件控制

[root@localhost ~]# vim /etc/sysconfig/i18n

LANG="
en_US.UTF-8 " 系统的语言

SYSFONT="lat0-sun16"

修改文件保存退出之后要生效要执行如下命令才可生效

[root@localhost ~]$ source /etc/sysconfig/i18n

4、vim编辑器与编码相关:

1)fileencoding,用于配置打开文件和保存文件的编码,但只能有一个值,只适合少数文件都是同种编码的环境,所以一般不使用

2)fileencodings, 从名字上看就知道是fileencoding的增强版,可以配置多种不同的编码,常见的配置为,配置好之后,列表中的文本编码只要合法,都能被vim正确 的读取,建议配置:set fileencodings=utf-bom,utf-8,gbk,gb2312,gb18030,cp936,latin1

3)encoding,vim内部编码,vim读取文件之后,但并不以读取文件的编码来处理,而是会转换成内部编码的格式,这个编码一般与操作系统相关,linux下utf-8居多,中文windows下则是gdk,建议配置:set encoding=utf-8

4)termencoding,vim输出的编码,输出指输出到操作系统或命令终端等,默认与操作系统的语言编码一致,如果使用linux命令终端,建议终端和linux系统配置相同的编码,然后配置相同的termencoding,否则顾全了vim就顾不上shell,不过如果shell不存在中文名文件,则配置终端和 termencoding一致即可,对于windows,能自动的识别gbk和utf-8,不用特殊配置,建议配置:set termencoding=utf-8

5)fileformats,用于区分操作系统,主要是回车\r\n的区别,建议配置:set fileformats=unix,dos

常见的乱码有以下几种情形

(1)将windows环境下的文件rz到linux下时文件出现乱码

解决方案:1.在rz之前使用notepad++将文件格式转化为UTF-8无BOM格式或者ANSI编码格式;2.set encoding=utf-8;

(2)secureCRT或者xterm2编辑环境中出现乱码,只需在会话选项中调节字符编码为GB2312或者UTF-8

(3)当对日志文件进行vim编辑时出现乱码,大多数情况下是因为日志文件的格式为GB2312。

解决方案:1.set encoding=GB2312;2如果方案1不起作用的话,调整secureCRT或者xterm2的编辑环境为GB2312

(4)wget下载文件名乱码

解决方案:一般情况下加上–restrict-file-names=nocontrol,例如wget --restrict-file-names=nocontrol -m www.xxx.com/

(5)cat文件正常,vim文件不正常

解决方案:

a.直接写入/etc/vim/vimrc ,最后一行加上

修改内容为 set fileencodings=ucs-bom,utf-8,gbk,gb2312,latin1

set fileencoding=gb2312

set termencoding=utf-8

b.进行转码iconv -f gb2312 -t utf-8 19.txt

批量文件转码命令iconv -c -f gbk -t utf-8 $data_path/$item_uv

 

参考来源:

https://www.linuxidc.com/Linux/2014-03/97777.htm

https://blog.csdn.net/wusuopubupt/article/details/50947243

关于字符集的优秀文档链接

https://wenku.baidu.com/view/1f476aea9ec3d5bbfd0a746a.html

Linux学习之十一-Linux字符集及乱码处理的更多相关文章

  1. Linux学习心得之 Linux下命令行Android开发环境的搭建

    作者:枫雪庭 出处:http://www.cnblogs.com/FengXueTing-px/ 欢迎转载 Linux学习心得之 Linux下命令行Android开发环境的搭建 1. 前言2. Jav ...

  2. Linux学习心得之 Linux下ant安装与使用

    作者:枫雪庭 出处:http://www.cnblogs.com/FengXueTing-px/ 欢迎转载 Linux学习心得之 Linux下ant安装与使用 1. 前言2. ant安装3. 简单的a ...

  3. linux学习书籍推荐linux学习书籍推荐

    引用地址:http://www.cnblogs.com/notepi/archive/2013/06/15/3137103.html Linux 学习书目推荐 Linux基础 1.<Linux与 ...

  4. Linux学习之二-Linux系统的目录结构

    Linux学习之二-Linux系统的目录结构 在Linux的根目录下,有很多的目录,但是需要记住,对于Linux而言,一切皆文件.因此此处的目录也是文件.用ls / 命令就能看到根目录下的各类不同的目 ...

  5. linux学习笔记2 - linux常用命令

    转载请标注原链接:http://www.cnblogs.com/xczyd/p/5543731.html 第一篇博客:linux学习笔记1-ubuntu的安装与基本设置 之中,已经介绍了如何安装lin ...

  6. Linux学习笔记之Linux相关知识

    [想成为某一方面的大神,没有捷径可走,只能不断的记录.练习.总结.coding……] notes:主要从网上摘录了一些关于Linux的历史以及一些相关内容,以便对Linux系统有一定的了解.这不但可以 ...

  7. Linux学习笔记之Linux启动引导过程

    早期时,启动一台计算机意味着要给计算机喂一条包含引导程序的纸带,或者手工使用前端面板地址/数据/控制开关来加载引导程序.尽管目前的计算机已经装备了很多工具来简化引导过程,但是这一切并没有对整个过程进行 ...

  8. Linux学习笔记之Linux第一课-基本介绍

    Linux简介 Linux内核最初只是由芬兰人李纳斯·托瓦兹(Linus Torvalds)在赫尔辛基大学上学时出于个人爱好而编写的. Linux是一套免费使用和自由传播的类Unix操作系统,是一个基 ...

  9. Linux学习23-Xftp上传文件显示乱码问题

    前言 当我们在windows新建一个文件,里面有中文时,使用Xftp上传到linux服务器上,会出现乱码问题. Windows的默认编码为GBK Linux的默认编码为UTF-8 Xftp上传文件乱码 ...

随机推荐

  1. gcc学习记录

    -Wall: 使输出中包含警告信息,提示一些可以避免的错误.如果没有错误,则不会输出信息. -o:后面加上可执行文件的名字.如果不加-o选项,会默认生成a.out可执行文件.举例:gcc -Wall ...

  2. 从输入url开始,完善前端体系架构

    原文链接: https://segmentfault.com/a/1190000013662126 从输入URL到页面加载的过程?如何由一道题完善自己的前端知识体系! javascript 前端 23 ...

  3. 纸上得来终觉浅,绝知此事要躬行——Spring boot任务调度

    前言:之前今日开讲项目的时候,用到了Quartz进行任务调度.后来做一个电商项目的时候,还用到了Quartz任务调度. 觉得挺简单的,a peace of cake.  忽略了总结,当时闭着眼睛都能捉 ...

  4. 考研心得--一个差劲的ACMer

    考研心得   --ACMer(山东工商学院) 2019年2月20日星期三(正月十六),打开QQ音乐,播放<告别都市>,应同学要求,也是给自己奋斗一年多时间的“考研大业”一个交代,写下这篇考 ...

  5. [Android]APK一键反编译

    每次反编译就是件很烦的事情,烦了就开始偷懒.直接写成脚本节省操作. 使用apktool,d2j-dex2jar进行反编译 脚本:reseve-complie-apk.py import os impo ...

  6. 第二篇:python基础_2

    本篇内容 数字 字符串 元祖 字典 列表 集合 for循环 二进制 字符编码 文件处理 一.数字 1.int(整型) 在32位机器上,整数的位数为32位,取值范围为-2**31-2**31-1,即-2 ...

  7. 【bzoj4259/bzoj4503】残缺的字符串/两个串 FFT

    bzoj4259 题目描述 很久很久以前,在你刚刚学习字符串匹配的时候,有两个仅包含小写字母的字符串A和B,其中A串长度为m,B串长度为n.可当你现在再次碰到这两个串时,这两个串已经老化了,每个串都有 ...

  8. Python之数据结构:元组

    一.元组 tupleA=(1,2,3,4,5,6) print tupleA 1.元组支持的运算符 tup1+tup2 tup1*2 3 in tup2 for i in tup2: print i ...

  9. USACO 刷题记录bzoj

    bzoj 1606: [Usaco2008 Dec]Hay For Sale 购买干草——背包 #include<cstdio> #include<cstring> #incl ...

  10. VIjosP1046观光旅游

    背景 湖南师大附中成为百年名校之后,每年要接待大批的游客前来参观.学校认为大力发展旅游业,可以带来一笔可观的收入. 描述 学校里面有N个景点.两个景点之间可能直接有道路相连,用Dist[I,J]表示它 ...