linux locale和字符集

原创 2016年06月01日 22:06:08

locale

locale是地区的意思,linux里locale是根据用户使用的语言,所在地区,习惯等等定义的一个软件的运行时环境,就是一些环境变量的集合,以LC_开头。常见的如下

  • LC_CTYPE 语言符号
  • LC_NUMERIC 数字
  • LC_TIME 时间格式
  • LC_COLLATE 比较和排序习惯
  • LC_MONETARY 货币
  • LC_MESSAGES 提示信息,状态信息等
  • LC_NAME 姓名书写和显示习惯
  • LC_ADDRESS 地址格式
  • LC_TELEPHONE 电话号码格式
  • LC_MEASUREMENT 度量衡
  • LC_PAPER 纸张尺寸
  • LC_IDENTIFICATION 对locale自身包含信息的概述
  • LC_ALL 设置之后会覆盖所有其他LC变量。
  • LANG 最低优先级的设置,如果所有LC_*都没有设置,则使用LANG

locale的格式形如en_US.UTF-8,前面是语言和地区,后面是字符集。语言和地区定义文件放在/usr/share/i18n/locales,字符集定义在/usr/share/i18n/charmaps。组合之后的locale信息放在/usr/lib/locale/locale-archive里,是二进制文件。locale命令可以查看和创建locale。locale -a列出所有已有的locale。

常用语言和地区有zh_CN(中文,中华人民共和国), zh_TW(中文,中国台湾地区), zh_HK(中文,中国香港地区), en_US(英文,美国), en_GB(英文,英国)等。
常用字符集有ASCII, BIG5, GB18030, GB2312, GBK, UTF-8, Unicode, UTF-8/16/32等。
常用的locale有en_US.utf8,zh_CN.utf8,和POSIX定义的最基本的C。

字符集

字符集定义两个标准,一个是编码方式,即字符和二进制字节串数值的对应关系,二是编码的存储和传输方式。
比如ASCII,编码方式是128个字符对应0~127共128个数值,存储方式是一个字符占用一个字节的存储空间,传输也是一个字节一个字节传输。
而Unicode,只定义了字符和数值的对应关系,没有定义存储和传输的方法。UTF-8/16/32就是基于Unicode的存储和传输标准,比如用几个字节存储编码,存储和传输时是大端还是小端。

1.ASCII
128个字符,包括0x20一下的终端控制码,如换行,鸣响,反白等,和英文大小写,数字,标点符号。扩展的ASCII有256个,包括制表符等。占用一个字节的存储空间。

2.GB2312
是对ASCII的扩展。小于等于127的单个字节被解析为ASCII字符,两个大于127的字节凑在一起就表示一个汉字,汉字的第一个字节数值从0xA1到0xF7,第二个字节从0xA1到0xFE。一共组成7000个字符,包括汉字,希腊罗马字母,日文,另外还把ASCII的数字标点和字母按照两个字节重新编码,叫做全角字符,原来的ASCII就叫半角字符。

3.GBK
在GB2312上继续扩展,新增了20000个汉字,包括繁体。

4.GB18030
在GBK上增加了少数民族语言的字符。整个GB标准被统称为DBCS(Double Byte Charecter Set 双字节字符集),特点就是要检查一个字节的值是否大于127,来决定按照单字节解析为ASCII还是按照双字节解析为汉字。

5.BIG5
台湾的汉字字符标准

6.UCS(Unicode)
ISO制定的标准,期望将世界上所有的字符都纳入一个字符集当中。可容纳100多万个字符。但并没有规定存储方式。比如较小的数值可能只需要一个字节就能存储,而大的可能需要4个字节。可以采用定长4字节存储,但表示英文时,相对于ASCII会严重浪费存储空间。所以一般采用变长存储,这就是UTF字符集。

7.UTF-8
规定了unicode的存储和传输。是变长存储标准,用1~4个字节存储字符的编码。标准如下
(1)对于单字节字符,和ASCII码相同,127以下
(2)对于n字节的符号(n>1),第一个字节的前n位都设为1,第n+1位设为0,后面字节的前两位一律设为10。剩下的没有提及的二进制位,全部为这个符号的unicode码。

Unicode符号范围        UTF-8编码方式
 (十六进制)              (二进制)
0000 0000-0000 007F   0xxxxxxx
0000 0080-0000 07FF   110xxxxx 10xxxxxx
0000 0800-0000 FFFF   1110xxxx 10xxxxxx 10xxxxxx
0001 0000-0010 FFFF   11110xxx 10xxxxxx 10xxxxxx 10xxxxxx 

但是这样存储后,unicode的编码和UTF-8存储的数值就不一样了,但是他们之间可以通过程序转换。
缺点是一个汉字要用3个字节表示。

8.UTF-16
常用英文和汉字都占用两个字节。英文多的话UTF-8省空间,英文少则UTF-16省空间

9.UTF-32
4字节定长存储编码,太浪费了。

参考
http://blog.csdn.net/z4213489/article/details/7937894
http://www.zhihu.com/question/23374078

Linux中locale 详解

http://blog.csdn.net/angelseyes/article/details/4820586locale 是国际化与本土化过程中的一个非常重要的概念,个人认为,对于中文用户来说,通常...
  • wclin88
  • wclin88
  • 2011年07月21日 21:14
  • 2028

linux系统locale的设定

[原文链接]:http://www.cnblogs.com/markjiao/archive/2008/05/20/1203316.html 设定locale 让Linux能够输入中文 loc...
  • u011077672
  • u011077672
  • 2017年04月24日 11:10
  • 629

linux 乱码 及解决方法 locale 可以利用iconv -l 来查看linux系统都支持哪种编码格式

引用的网址:http://www.syxin.com/2006/03/localelocale.htmlhttp://www.linuxfans.org/nuke/modules.php?name=F...
  • eqxu
  • eqxu
  • 2006年05月25日 15:14
  • 3761

linux locale

~/.bashrc /etc/profile /.bash_profile 字符编码配置文件 /etc/sysconfig/i18n centos 7已经没有了 /etc/locale.conf ...
  • mengxiangbaidu
  • mengxiangbaidu
  • 2016年05月20日 18:57
  • 2292

linux locale设置

Linux的Local设置 (2012-04-06 15:55:16) 转载▼ 标签: linux locale it 分类: Linux ...
  • hunanchenxingyu
  • hunanchenxingyu
  • 2014年07月07日 22:47
  • 1883

使用locale命令来查看linux系统的默认编码和支持的其他编码

系统环境:Red Hat Enterprise Linux Server 6 [root@1-min huage]# locale             //查看当前系统的语言环境 LA...
  • a351945755
  • a351945755
  • 2014年03月22日 00:08
  • 20166

Locale(编码问题)

关于locale的设定 locale是国际化与本土化过程中的一个非常重要的概念,个人认为,对于中文用户来说,通常会涉及到的国际化或者本土化,大致包含三个方面:看中文,写中文,与window中文系统的...
  • mengxingyuanlove
  • mengxingyuanlove
  • 2015年11月12日 20:12
  • 703

Java字符串的大小写转换与Locale

涉及到多国语言的时候,需要调用Locale版本的的toLowerCase(Locale)和toUpperCase(Locale)方法。 示例: import java.util.Local...
  • u013344915
  • u013344915
  • 2014年01月12日 11:22
  • 1278

用boost locale库进行字符集转换的问题

1: Five Chinese words[白日依山尽]_by macro L 2: Five Chinese words[请按任意键继续. . . 本想用 boost::locale::conv:...
  • aseity
  • aseity
  • 2015年09月09日 11:48
  • 1790

学习笔记7——在CentOS中修改中文字符集

虽然在实际工作环境下,Linux中不建议使用中文,但是如果一定要进行中文显示,尤其对于刚接触linux且英语基础不太好的人来说,那么本文具有一定的参考价值。 本文介绍在linux的shell环境下优化...
  • xiaolong361
  • xiaolong361
  • 2016年08月22日 17:06
  • 5225
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:linux locale和字符集
举报原因:
原因补充:

(最多只允许输入30个字)