Linux字符集和系统语言设置-LANG,locale,LC_ALL,POSIX等命令及参数详解

博文说明【前言】:

本文将通过个人口吻介绍Linux字符集和系统语言设置,包括LANG,locale,LC_ALL,POSIX等命令及参数详解的相关知识,在目前时间点【2017年6月21号】下,所掌握的技术水平有限,可能会存在不少知识理解不够深入或全面,望大家指出问题共同交流,在后续工作及学习中如发现本文内容与实际情况有所偏差,将会完善该博文内容。

本文参考文献引用链接:

1、http://blog.csdn.net/z4213489/article/details/7937894【好文,必看】
2、http://www.360doc.com/content/14/0103/13/10384031_342301450.shtml【各种格式区别讲解的比比较详细,必看】


正文:

 

一:字符集部分

字符集就是:01二进制数据<--到-->字符的对应关系表(也可以称为对应关系数据库,对应关系集合)

 

示例:

假设这是utf8字符集对应关系:
00010101----例
10101100----如

假设这是GBK字符集对应关系:
00010101----乱

10101100----码

讲解:

我们可以很清楚的看到,相同一段数据,使用不同的字符集,会有不同的显示结果,这就是我们乱码现象的根源,因为不同字符集组织数据的方式不一样

ps:浏览器展示网页时,网页内容使用字符集如果和系统字符集不一致,一般也不会发生乱码现象(英文的windows系统能正常看中文页面),因为浏览器在获取网页文件时,浏览器会做一个判断,识别网页内容使用的字符集,然后使用相对应字符集去显示页面内容,注意,前提是你操作系统中要有这些字符集存在。

补充知识-字体:

字体:文字渲染效果,同样的一个字,会有:宋体、黑体、仿宋、隶书、楷书、微软雅黑等等效果,字体建立在字符集基础之上。但每个字体库可能不会包含某个字符集全部的字体,有些时候会显示不完全。

总结:

语言是建立在字符集的基础之上的,比如我们的系统使用中文语言,这就是说,有以下几点
1、写:我们输入的汉字要能在计算机中能以汉字字符集的格式进行组织保存并传输。
2、看:网络远端传输过来的数据(二进制数据),我计算机收到之后,需要能展示出汉字字体(此时就要用到这个对应关系表)
总结来说,在中文环境中就是:看中文,写中文(重点在此),传中文。

Linux中字符集文件存放位置: /usr/share/i18n/charmaps

二:系统语言设置-locale部分

1、什么是locale

在Linux中,它使用locale命令来设置和显示程序运行的语言环境(也就是系统运行语言环境,应用进程是在系统的进程之上运行的,应用程序的父进程是init进程)

locale的英文直译为场所,地区,地域,但它在Linux中含义要更大,在Linux中Locale根据计算机用户所使用的语言,所在国家或者地区,以及当地的文化传统定义一个软件运行时的语言环境 。

locale的主要作用是描述某一个地域内的人们的语言习惯和文化传统和生活习惯。一个地区的locale就是根据几大类的习惯(变量)定义的。

2、locale的命名规则

locale 命名规则:<语言>_<地区>.<字符集编码><@修正值>
例如:
zh_CN.utf8
zh_CN.utf8,zh代表中文,CN代表大陆地区,utf8表示字符集。

de_DE.UTF-8@euro
de表示德语,DE表示德国,UTF-8表示字符集,euro表示按照欧洲习惯加以修正 

这个命令规则就是说我们在设置locale的相关变量时,都是使用这种格式给变量进行赋值

3、locale命令及参数讲解

设置Locale的根本其实就是设置一组总共12个LC开头的变量(不包括LANG和LC_ALL)

Linux中locale文件存放位置: /usr/share/i18n/locales

示例:

weblogic@YDCK-APP11:~/.ssh> locale
LANG=zh_CN.utf8
LC_CTYPE="zh_CN.utf8"
LC_NUMERIC="zh_CN.utf8"
LC_TIME="zh_CN.utf8"
LC_COLLATE="zh_CN.utf8"
LC_MONETARY="zh_CN.utf8"
LC_MESSAGES="zh_CN.utf8"
LC_PAPER="zh_CN.utf8"
LC_NAME="zh_CN.utf8"
LC_ADDRESS="zh_CN.utf8"
LC_TELEPHONE="zh_CN.utf8"
LC_MEASUREMENT="zh_CN.utf8"
LC_IDENTIFICATION="zh_CN.utf8"
LC_ALL=

讲解:

LANG                         #LANG的优先级是最低的,它是所有LC_*变量的默认值。下方所有以LC_开头变量(不包括LC_ALL)中,如果存在没有设置变量值的变量,那么系统将会使用LANG的变量值来给这个变量进行赋值。如果变量有值,则保持不变,不受影响。可以看到,我们上面示例中的输出中的LC_*变量的值其实就是LANG变量决定的

LC_CTYPE                   #用于字符分类和字符串处理,控制所有字符的处理方式,包括字符编码,字符是单字节还是多字节,如何打印等,这个变量是最重要的。
LC_NUMERIC              #用于格式化非货币的数字显示。
LC_TIME                      #用于格式化时间和日期。
LC_COLLATE                #用于比较和排序。
LC_MONETORY           #用于格式化货币单位。
LC_MESSAGES             #用于控制程序输出时所使用的语言,主要是提示信息,错误信息,状态信息, 标题,标签, 按钮和菜单等。
LC_PAPER                     #默认纸张尺寸大小
LC_NAME                     #姓名书写方式
LC_ADDRESS                #地址书写方式
LC_TELEPHONE            #电话号码书写方式
LC_MEASUREMENT     #度量衡表达方式
LC_IDENTIFICATION    #locale对自身包含信息的概述

LC_ALL                         #它不是环境变量,它是一个宏,可通过该变量的设置覆盖所有的LC_*变量。这个变量设置之后,可以废除LC_*的设置值,使得这些变量的设置值与LC_ALL的值一致,注意,LANG变量不受影响。

宏:可能会有人对宏没概念,简单说明下,我们在计算机领域说的宏(Macro),是批量处理的一个说法。宏是一种通过某种指定规则来处理数据的过程,可以称之为语法替换(大家应该在编辑器里匹配替换过数据,但这这里要复杂点),这里不同数据替换,宏是获取某种输入(通常是字符串),然后如何根据事先定义的规则,转换成对应的输出(通常也是字符串)。真实的宏要比这里说的复杂,有兴趣可以自行查资料。
在这里,我们这个宏操作就是用LC_ALL的值去覆盖LC_*的变量值

格式化:上面的含义讲到格式化,可能会有人不太清楚,格式化就是重新设定组织数据的规则,拿我们日常生活举例子,我们要记录一段数据,我们可以记在方格纸上,可以记在横格纸上,可以记在白纸上等等,这里的这种的纸张格式就是组织数据的一种方式,不同格式,记录方式和数据量等都不一样,我们在Windows系统中,经常做的格式化优盘操作就是这样,可以把自带的FAT32格式,重新格式化定义为NTFS格式,你可以理解为,将优盘的记录数据从方格纸方式变成横格纸方式。

优先级级别:LC_ALL>LC_*>LANG

注意:定义这么多变量在某些情况下是很有用的,例如,当我需要一个能够输入中文的英文环境,我可以把 LC_CTYPE设定成zh_CN.GB18030,而其他所有的项都是en_US.UTF-8。 

总结:LANG是LC_*的默认值,而LC_ALL比LC_*的优先级都高,设置完LC_ALL之后,会强制重置LC_*的值,如果不将LC_ALL的值重置为空,则无法再去设置LC_*的值

补充:一般来说,我们在新装系统之后,我们的变量的值将会是下面这种情况:
NTP-slave:~ # locale
LANG=POSIX
LC_CTYPE=en_US.UTF-8
LC_NUMERIC="POSIX"
LC_TIME="POSIX"
LC_COLLATE="POSIX"
LC_MONETARY="POSIX"
LC_MESSAGES="POSIX"
LC_PAPER="POSIX"
LC_NAME="POSIX"
LC_ADDRESS="POSIX"
LC_TELEPHONE="POSIX"
LC_MEASUREMENT="POSIX"
LC_IDENTIFICATION="POSIX"
LC_ALL=

讲解:C是系统默认的locale,而POSIX是C的别名,这是标准的C Locale。它所指定的属性和行为由ISO C标准所指定。当我们新安装完一个系统时,默认的locale就是C或POSIX。
我们这里说的C其实就是ASCII编码。

POSIX:可移植操作系统接口(Portable Operating System Interface of UNIX,缩写为 POSIX ),POSIX标准定义了操作系统应该为应用程序提供的接口标准,是IEEE为要在各种UNIX操作系统上运行的软件而定义的一系列API标准的总称,其正式称呼为IEEE 1003,而国际标准名称为ISO/IEC 9945。
换句话说,为一个POSIX兼容的操作系统编写的程序,可以在任何其它的POSIX操作系统(即使是来自另一个厂商)上编译执行。
总结:POSIX是一种类UNIX系统的通用接口标准,基于这个标准开发的程序,能够灵活的迁移到不同版本系统上使用。

在这里,locale中的POSIX说的就是一种业内统一的默认locale标准,不区分地域,所有Linux发行版本都支持。

4、常用命令:

1、查看当前locale设置
# locale

NTP-slave:~ # locale
LANG=zh_CN.utf8
LC_CTYPE=en_US.UTF-8
LC_NUMERIC="zh_CN.utf8"
LC_TIME="zh_CN.utf8"
LC_COLLATE="zh_CN.utf8"
LC_MONETARY="zh_CN.utf8"
LC_MESSAGES="zh_CN.utf8"
LC_PAPER="zh_CN.utf8"
LC_NAME="zh_CN.utf8"
LC_ADDRESS="zh_CN.utf8"
LC_TELEPHONE="zh_CN.utf8"
LC_MEASUREMENT="zh_CN.utf8"
LC_IDENTIFICATION="zh_CN.utf8"
LC_ALL=

2、查看当前系统的所有可用locale
# locale -a

3、设置系统的locale(此处以zh_CN.utf8为例)

1)编辑文件:/etc/profie,在文件末尾添加以下内容并报错退出
#vim /etc/profile
export LC_ALL=zh_CN.utf8
export LANG=zh_CN.utf8
2)执行生效命令:
#source /etc/profile

【转载】Linux字符集和系统语言设置-LANG,locale,LC_ALL,POSIX等命令及参数详解的更多相关文章

  1. (转)linux TOP命令各参数详解【转载】

    实时监控或查看系统资源使用情况的工具——TOP top命令是Linux下常用的性能分析工具,能够实时显示系统中各个进程的资源占用状况,类似于Windows的任务管理器. 下面详细介绍它的使用方法: ( ...

  2. linux TOP命令各参数详解【转载】

    实时监控或查看系统资源使用情况的工具——TOP top命令是Linux下常用的性能分析工具,能够实时显示系统中各个进程的资源占用状况,类似于Windows的任务管理器. 下面详细介绍它的使用方法: ( ...

  3. linux top 命令各参数详解

    简介 top命令是Linux下常用的性能分析工具,能够实时显示系统中各个进程的资源占用状况,类似于Windows的任务管理器. top显示系统当前的进程和其他状况,是一个动态显示过程,即可以通过用户按 ...

  4. 以太坊客户端Geth命令用法-参数详解【转载】

    原文链接:http://www.cnblogs.com/tinyxiong/p/7918706.html Geth在以太坊智能合约开发中最常用的工具(必备开发工具),一个多用途的命令行工具.熟悉Get ...

  5. 每天一个linux命令(文件操作):【转载】find 命令的参数详解

    find一些常用参数的一些常用实例和一些具体用法及注意事项. 1.使用name选项: 文件名选项是find命令最常用的选项,要么单独使用该选项,要么和其他选项一起使用.可以使用某种文件名模式来匹配文件 ...

  6. linux ln 命令使用参数详解(ln -s 软链接)(转)

    这是linux中一个非常重要命令,请大家一定要熟悉.它的功能是为某一个文件在另外一个位置建立一个同不的链接,这个命令最常用的参数是-s,具体用法是:ln -s 源文件 目标文件. 当 我们需要在不同的 ...

  7. 每天一个 Linux 命令(22):find 命令的参数详解

    find一些常用参数的一些常用实例和一些具体用法和注意事项. 1.使用name选项: 文件名选项是find命令最常用的选项,要么单独使用该选项,要么和其他选项一起使用.  可以使用某种文件名模式来匹配 ...

  8. 每天一个linux命令(22):find 命令的参数详解

    find一些常用参数的一些常用实例和一些具体用法和注意事项. 1.使用name选项: 文件名选项是find命令最常用的选项,要么单独使用该选项,要么和其他选项一起使用.  可以使用某种文件名模式来匹配 ...

  9. linux shutdown命令以及参数详解

    在说shutdown命令之前 先说一下sync命令: sync:将内存中尚未写入硬盘的数据写入硬盘 因为linux为了保证数据读写速度,把常用的数据放在内存中,不会立即写入硬盘,如果有不当关机,这些数 ...

随机推荐

  1. 网关Ocelot功能演示安排的明明白白~~~

    前言 网关(Gateway)在微服务架构中至关重要,可以将其理解为是外部客户端(前端.MVC后台等调用方)与后台服务的连接点,通过这层可以做统一的处理,比如路由.身份认证和授权.服务治理等: 网关的好 ...

  2. 加快Python运行速度

    01 使用哈希表的数据结构 如果在程序中遇到大量搜索操作时,并且数据中没有重复项,则可以使用查找而不是循环.举例如下: items = ['a', 'b',..,'100m'] #1000s of i ...

  3. seq 命令用法

    以指定增量从首数开始打印数字到尾数. 用法: seq [选项]... 尾数 或:seq [选项]... 首数 尾数 或:seq [选项]... 首数 增量 尾数 选项: -f, --format=格式 ...

  4. SCIP:构造过程抽象--面向对象的解释

    心智的活动,除了尽力产生各种简单的认知之外,主要表现为如下三个方面:(1)将若干简单认知组合为一个复合的认识,由此产出各种复杂的认知.(2)将两个认知放在一起对照,不管他们如何简单或者复杂,在这样做时 ...

  5. BUAA_OO_2020_第三单元总结

    BUAA_OO_2020_第三单元总结 JML理论基础 简介 JML(Java Modeling Language)是一种用于对JAVA程序进行规格化设计的语言,其通过定义接口所包含方法的行为,来约束 ...

  6. 软工案例分析之OJ

    项目 内容 这个作业属于哪个课程 2021春季计算机学院软件工程(罗杰 任健) 这个作业的要求在哪里 案例分析作业要求 我在这个课程的目标是 和我的团队开发一个真正的软件,一起提升开发与合作的能力 这 ...

  7. python基础(补充):列表生成器

    列表推导式是Python构建列表(list)的一种快捷方式,可以使用简洁的代码就创建出一个列表. 举个例子,要生成list [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]可以用list ...

  8. 翻译:《实用的Python编程》09_02_Third_party

    目录 | 上一节 (9.1 包) | 下一节 (9.3 版本分发) 9.2 第三方模块 Python 拥有一个包含各种内置模块的大型库(自带电池(batteries included))(译注:&qu ...

  9. Spring 学习笔记(一):Spring 入门

    1 Spring简介 Spring是一个轻量级Java开发框架,最早由Rod Johnson创建,目的是为了解决企业级应用开发的业务逻辑层和其他各层的耦合问题,是一个分层的Java SE/EE ful ...

  10. Qt获取一张图片的平均色(主色调)

    这两天在一个小工具中想做一个图标的发光效果,用固定颜色做出来效果很丑,于是想到此方法,得到图标的主色调后,将颜色调亮,并设置为阴影颜色,从而达到类似发光的效果. 本文章主要在于得到一张图片的平均色,并 ...