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来设置字符集

在Linux中通过locale来设置程序运行的不同语言环境,locale由ANSI C提供支持。locale的命名规则为_.,如zh_CN.UTF-8,zh代表中文,CN代表大陆地区,UTF-8表示字...

Linux中通过locale来设置字符集

/***************************************************************************************************...

字符集-Locale详解(续)

转自:http://www.linuxsky.org/doc/desktop/200704/20.html 本人注:一篇好文章,与大家分享~~~ 文中若有理解不到位或有偏差的地方,请高手指正~~~ l...

linux中locale自用总结

  • 2014-05-19 08:57
  • 338KB
  • 下载

linux系统locale的设定

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

bug宝典linux篇 LC_CTYPE: cannot change locale (en_US.UTF-8): No such file or directory

升级glibc库后,使用SecureCRT登录linux,提示:Last login: Mon Feb 20 02:03:21 2017 from 192.168.4.187 -bash: warni...

Linux下Bash对环境变量的操作,env,set,export,locale,ulimit,alias,unalias,history

观察环境变量的功能env env是environment的缩写,列出所有环境变量      env中列出的几个重要的变量: HOME 当前用户的家目录,cd  ~可以直接到这里...

Linux下C库学习 - locale.h

locale.hC语言要用在哪里,都应该包含什么内容,包括什么功能。随着历史中各种需求的沉淀,和各种实现的积累,C标准也日趋于完善。历经了5年的成长,看来一切都基本完成,可以画上一个句号了。剩下的工作...

Linux中使用locale命令设置语言环境

在Linux中通过locale来设置程序运行的不同语言环境,locale由 ANSI C提供支持。locale的命名规则为_.,如zh_CN.GBK,zh代表中文, CN代表大陆地区,GBK表示字符集...

Python 和 Linux locale 学习笔记

Python 和 Linux locale 学习笔记遇到一个问题python 中定义了unicode字符串。server Aunicode_string=u"hello \u2026" print u...
  • Kgong
  • Kgong
  • 2016-08-21 13:03
  • 169
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

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