jinfeng_wang
G-G-S,D-D-U!
BlogJava
首页
新随笔
联系
聚合
管理
400 Posts :: 0 Stories :: 296 Comments :: 0 Trackbacks
公告
欢迎交流链接,给我
留言
常用链接
我的随笔
我的评论
我的参与
最新评论
留言簿
(40)
给我留言
查看公开留言
查看私人留言
随笔分类
(592)
.Net(17)
2016-OS(6)
2016-REDIS(41)
2016SCALA(1)
2016-Sharding-JDBC(3)
2016-thinking(12)
2016-thread(2)
2016-zookeeper(29)
amusement(32)
ant(3)
AOP(6)
cpp(15)
Cruise Controle(1)
Eclipse(2)
hadoop(1)
hibernate(10)
idoms(1)
java(52)
Junit(6)
Linux(49)
log4j
maven(8)
News(1)
OpenSource(2)
oracle(5)
Other(20)
server(1)
spring(18)
structs(4)
Thinking(16)
tuxedo(16)
view(22)
weblogic(2)
website(8)
ZZ(180)
随笔档案
(400)
2017年2月 (6)
2017年1月 (4)
2016年12月 (82)
2011年10月 (2)
2010年4月 (10)
2010年3月 (1)
2010年2月 (2)
2009年11月 (1)
2009年10月 (5)
2009年9月 (3)
2009年6月 (1)
2009年5月 (41)
2009年4月 (2)
2009年3月 (1)
2008年11月 (3)
2008年10月 (2)
2008年8月 (2)
2008年7月 (1)
2008年6月 (2)
2008年4月 (1)
2008年3月 (26)
2008年1月 (1)
2007年12月 (1)
2007年11月 (1)
2007年8月 (6)
2007年7月 (8)
2007年6月 (5)
2007年5月 (16)
2007年4月 (12)
2007年3月 (13)
2007年2月 (8)
2007年1月 (4)
2006年10月 (1)
2006年9月 (1)
2006年8月 (1)
2006年7月 (1)
2006年6月 (2)
2006年5月 (4)
2006年4月 (3)
2006年3月 (2)
2006年2月 (1)
2006年1月 (19)
2005年12月 (2)
2005年9月 (3)
2005年6月 (4)
2005年5月 (11)
2005年4月 (27)
2005年3月 (38)
2005年2月 (7)
Domestic
Michael Chen’s Blog
临海观潮
兔八哥的狗窝
Foreign
搜索
积分与排名
积分 - 487299
排名 - 104
最新评论
1. re: 谈谈基于Kerberos的Windows Network Authentication zz[未登录]
真好!!!!!!!!!!!!!!!!!!
看的我都想给博主打钱了。
--test
2. re: 谈谈基于Kerberos的Windows Network Authentication zz
赞!写得很好。
--asir
3. re: Java Thread.interrupt 害人! 中断JAVA线程(zz)[未登录]
@编程浪子
哈哈,你想的太简单了...你睡眠的时候interrupt不一定刚好命中你.所以你还是永远结束不了.
--码魂
4. re: 谈谈基于Kerberos的Windows Network Authentication zz
好是好,就是错别字太他妈的多了。
--路人
5. re: Java Thread.interrupt 害人! 中断JAVA线程(zz)[未登录]
评论内容较长,点击标题查看
--编程浪子
6. re: Java Thread.interrupt 害人! 中断JAVA线程(zz)
楼主举的例子循序渐进的,讲得很明白
--刘三
7. re: Java Thread.interrupt 害人! 中断JAVA线程(zz)
评论内容较长,点击标题查看
--question
8. re: Java Thread.interrupt 害人! 中断JAVA线程(zz)
评论内容较长,点击标题查看
--graykeel
9. re: 谈谈基于Kerberos的Windows Network Authentication zz
@陈朝对的 好像Q要改为P
--马根
10. re: 工作流之大局势
真的好细致,专业,能给我发一份国内的么?cayh2008@foxmail.com
--cayh
11. re: Java Thread.interrupt 害人! 中断JAVA线程(zz)
好文章必须赞,根据您的办法果然解决了一个大问题!!
--toney
12. re: 谈谈基于Kerberos的Windows Network Authentication zz
你好,请教个问题:windows是如何保证KDC是可信的?安全的?如何保证MasterKey不被泄露?
--brad
13. re: WebLogic教程:在WebLogic Server中集成Apache Poi
fa
--fs
14. re: Java Thread.interrupt 害人! 中断JAVA线程(zz)
说了一些基本的东西哦..呵呵.不过也不错
--红泪
15. re: 汉字简体繁体转换(zz)
寻找那个她
--个v
16. re: JVM参数调优实践 xx
评论内容较长,点击标题查看
--萧工
17. re: Java Thread.interrupt 害人! 中断JAVA线程(zz)
评论内容较长,点击标题查看
--谁不可以
18. re: Java Thread.interrupt 害人! 中断JAVA线程(zz)
评论内容较长,点击标题查看
--谁不可以
19. re: Java Thread.interrupt 害人! 中断JAVA线程(zz)[未登录]
@客人
我觉的很厉害了,咋还不够透,要不你讲透彻一点,我最近就是要中断一个等待另外一个系统,返回值的线程,可能网络丢失,那个线程卡在那了,现在要关闭当前的,重新启动一个该线程。
--lz
20. re: 日本电视台:
KEYHOLETV 百度上能搜到
--琨
阅读排行榜
1. Java Thread.interrupt 害人! 中断JAVA线程(zz)(38601)
2. 谈谈基于Kerberos的Windows Network Authentication zz(10757)
3. Spring IDE的使用(9999)
4. 工作流之大局势(9599)
5. hibernate transaction theory(2)(7622)
6. 大嘴日语的破解(6905)
7. Spring JDBC DAO的两个example(6240)
8. 标准日本语中级视频下载(5701)
9. [C++]static全局变量/全局变量,static函数/普通函数,函数中static变量/函数中的变量,类中的static成员变量/普通类成员变量 (zz)(5062)
10. 日本語 EUC ・シフト JIS 間コード変換仕様とコード系実態調査(4975)
11. 再给一个“访问屏蔽网站”的方法(4603)
12. 超强的上海空姐(4368)
13. Windows CMD Console 字符集的修改(4187)
14. Spring封装Hibernate(4119)
15. 人员、资源、操作及这三者构成的权限控制(4044)
16. SiteMesh:一个优于Apache Tiles的Web页面布局、装饰框架 zz(3807)
17. Magic Maven( Translation part 1) (3608)
18. 从浪漫到流行---法语香颂(Chanson)百年纵览(zz)(3592)
19. 使用JMeter进行性能测试(3525)
20. 汉字简体繁体转换(zz)(3326)
评论排行榜
1. 大嘴日语的破解(45)
2. 汉字简体繁体转换(zz)(26)
3. 工作流之大局势(24)
4. 谈谈基于Kerberos的Windows Network Authentication zz(24)
5. Java Thread.interrupt 害人! 中断JAVA线程(zz)(12)
6. 成功窃取一个小网站 :)(12)
7. 标准日本语中级视频下载(11)
8. jlpt.etest.edu.cn 运行过程中出现的一点内容(7)
9. 第一眼是错的(zz)(5)
10. Checked Exception VS UnChecked Excetion (续2)(5)
11. 人员、资源、操作及这三者构成的权限控制(5)
12. Magic Maven translation release发布(5)
13. hibernatesynch的安装与使用(4)
14. 利用Java实现串口全双工通讯(zz)(4)
15. 可怜的Eclipse(4)
16. 再给一个“访问屏蔽网站”的方法(4)
17. Checked Exception VS UnChecked Excetion(4)
18. 日本电视台:(4)
19. Window+GCC+CDT用Eclipse開發C、C++ (zz)(3)
20. 收藏一个站点 http://www.open-open.com/ (3)
locale的设定及其LANG、LC_ALL、LANGUAGE环境变量的区别 zz
/etc/sysconfig/i18n
locale 是国际化与本土化过程中的一个非常重要的概念,个人认为,对于中文用户来说,通常会涉及到的国际化或者本土化,大致包含三个方面:看中文,写中文,与 window中文系统的兼容和通信。从实际经验上看来,locale的设定与看中文关系不大,但是与写中文,及window分区的挂载方式有很密切的关系。本人认为就像一个纯英文的Windows能够浏览中文,日文或者意大利文网页一样,你不需要设定locale就可以看中文。那么,为什么要设定 locale呢?什么时候会用到locale呢?
Tags: locale 设定 原因 解释
一、为什么要设定locale 正如前面我所讲的,设定locale与你能否浏览中文的网页没有直接的关系,即便你把locale设置成 en_US.ISO-8859-1这样一个标准的英文locale你照样可以浏览中文的网页,只要你的系统里面有相应的字符集(这个都不一定需要)和合适的字体(如simsun),浏览器就可以把网页翻译成中文给你看。具体的过程是网络把网页传送到你的机器上之后,浏览器会判断相应的编码的字符集,根据网页采用的字符集,去字体库里面找合适的字体,然后由文字渲染工具把相应的文字在屏幕上显示出来。
在下文本人会偶尔把字符集比喻成密码本,个人觉得对于一些东西比较容易理解,假如你不习惯的话,把全文copy到任何文本编辑器,用字符集替换密码本即可。
那有时候网页显示乱码或者都是方框是怎么回事呢?个人认为,显示乱码是因为设定的字符集不对(或者没有相应的字符集),例如网页是用UTF-8编码的,你非要用GB2312去看,而系统根据GB2312去找字体,然后在屏幕上显示,当然是一堆的乱码,也就是说你用一个错误的密码本去翻译发给你的电报,当然内容那叫一个乱;至于有些时候浏览的网页能显示一部分汉字,但有很多的地方是方框,能够显示汉字说明浏览器已经正确的判断出了网页的编码,并在字体库里面找到了相应的文字,但是并不是每个字体库都包含某个字符集全部的字体的缘故,有些时候会显示不完全,找一个比较全的支持较多字符集的字体就可以了。
既然我能够浏览中文网页,那为什么我还要设定locale呢?
其实你有没有想过这么一个问题,为什么gentoo官方论坛上中文论坛的网页是用UTF-8编码的(虽然大家一直强烈建议用GB2312编码),但是新浪网就是用GB2312编码的呢?而Xorg的官方网页竟然是ISO-8859-15编码的,我没有设定这个locale怎么一样的能浏览呢?这个问题就像是你有所有的密码本,不论某个网站是用什么字符集编码的,你都可以用你手里的密码本把他们翻译过来,但问题是虽然你能浏览中文网页,但是在整个操作系统里面流动的还是英文字符。所以,就像你能听懂英语,也能听懂中文。 最根本的问题是:你不可以写中文。
当你决定要写什么东西的时候,首先要决定的一件事情是用那种语言,对于计算机来说就是你要是用哪一种字符集,你就必须告诉你的linux系统,你想用那一本密码本去写你想要写的东西。知道为什么需要用GB2312字符集去浏览新浪了吧,因为新浪的网页是用GB2312写的。
为了让你的Linux能够输入中文,就需要把系统的locale设定成中文的(严格说来是locale中的语言类别LC_CTYPE ),例如 zh_CN.GB2312、zh_CN.GB18030或者zh_CN.UTF-8。很多人都不明白这些古里古怪的表达方式。这个外星表达式规定了什么东西呢?这个问题稍后详述,现在只需要知道,这是locale的表达方式就可以了。
locale这个单词中文翻译成地区或者地域,其实这个单词包含的意义要宽泛很多。Locale是根据计算机用户所使用的语言,所在国家或者地区,以及当地的文化传统所定义的一个软件运行时的语言环境。
[oracle@game ~]$
locale
LANG=en_US.UTF-8
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=en_US.UTF-8
[oracle@game ~]$
locale把按照所涉及到的文化传统的各个方面分成12个大类,这12个大类分别是:
1、语言符号及其分类(LC_CTYPE)
2、数字(LC_NUMERIC)
3、比较和排序习惯(LC_COLLATE)
4、时间显示格式(LC_TIME)
5、货币单位(LC_MONETARY)
6、信息主要是提示信息,错误信息,状态信息,标题,标签,按钮和菜单等(LC_MESSAGES)
7、姓名书写方式(LC_NAME)
8、地址书写方式(LC_ADDRESS)
9、电话号码书写方式(LC_TELEPHONE)
10、度量衡表达方式 (LC_MEASUREMENT)
11、默认纸张尺寸大小(LC_PAPER)
12、对locale自身包含信息的概述(LC_IDENTIFICATION)。
所以说,locale就是某一个地域内的人们的语言习惯和文化传统和生活习惯。一个地区的locale就是根据这几大类的习惯定义的,这些locale定义文件放在/usr/share/i18n/locales目录下面,例如en_US, zh_CN and de_DE@euro都是locale的定义文件,这些文件都是用文本格式书写的,你可以用写字板打开,看看里边的内容,当然出了有限的注释以外,大部分东西可能你都看不懂,因为是用的Unicode的字符索引方式。
[oracle@game ~]$
cd /usr/share/i18n/locales
[oracle@game locales]$
ls
aa_DJ ar_YE el_GR es_ES fr_CH iso14651_t1 ne_NP so_ET translit_hangul
aa_ER az_AZ el_GR@euro es_ES@euro fr_FR it_CH nl_BE so_KE translit_narrow
aa_ER@saaho be_BY en_AU es_GT fr_FR@euro it_IT nl_BE@euro so_SO translit_neutral
aa_ET bg_BG en_BW es_HN fr_LU it_IT@euro nl_NL sq_AL translit_small
af_ZA bn_BD en_CA es_MX fr_LU@euro iw_IL nl_NL@euro sr_CS translit_wide
am_ET bn_IN en_DK es_NI ga_IE ja_JP nn_NO st_ZA tr_TR
an_ES br_FR en_GB es_PA ga_IE@euro ka_GE no_NO sv_FI tt_RU
ar_AE br_FR@euro en_HK es_PE gd_GB kk_KZ oc_FR sv_FI@euro uk_UA
ar_BH bs_BA en_IE es_PR gez_ER kl_GL om_ET sv_SE ur_PK
ar_DZ byn_ER en_IE@euro es_PY gez_ER@abegede kn_IN om_KE ta_IN uz_UZ
ar_EG ca_ES en_IN es_SV gez_ET ko_KR pa_IN te_IN uz_UZ@cyrillic
ar_IN ca_ES@euro en_NZ es_US gez_ET@abegede kw_GB pl_PL tg_TJ vi_VN
ar_IQ cs_CZ en_PH es_UY gl_ES lg_UG POSIX th_TH wa_BE
ar_JO cy_GB en_SG es_VE gl_ES@euro lo_LA pt_BR ti_ER wa_BE@euro
ar_KW da_DK en_US et_EE gu_IN lt_LT pt_PT ti_ET wal_ET
ar_LB de_AT en_ZA eu_ES gv_GB lv_LV pt_PT@euro tig_ER xh_ZA
ar_LY de_AT@euro en_ZW eu_ES@euro he_IL mi_NZ ro_RO tl_PH yi_US
ar_MA de_BE es_AR fa_IR hi_IN mk_MK ru_RU translit_circle zh_CN
ar_OM de_BE@euro es_BO fi_FI hr_HR ml_IN ru_UA translit_cjk_compat zh_HK
ar_QA de_CH es_CL fi_FI@euro hu_HU mn_MN se_NO translit_cjk_variants zh_SG
ar_SA de_DE es_CO fo_FO hy_AM mr_IN sid_ET translit_combining zh_TW
ar_SD de_DE@euro es_CR fr_BE i18n ms_MY sk_SK translit_compat zu_ZA
ar_SY de_LU es_DO fr_BE@euro id_ID mt_MT sl_SI translit_font
ar_TN de_LU@euro es_EC fr_CA is_IS nb_NO so_DJ translit_fraction
[oracle@game locales]$
对于de_DE@euro的一点说明,@后边是修正项,也就是说你可以看到两个德国的locale:/usr/share/i18n/locales /de_DE@euro和/usr/share/i18n/locales/de_DE。打开这两个locale定义,你就会知道它们的差别在于 de_DE@euro使用的是欧洲的排序、比较和缩进习惯,而de_DE用的是德国的标准习惯。
上面我们说到了zh_CN.GB18030的前半部分,后半部分是什么呢?大部分Linux用户都知道是系统采用的字符集。
zh_CN.GB2312到底是在说什么?
Locale是软件在运行时的语言环境, 它包括语言(Language), 地域 (Territory) 和字符集(Codeset)。一个locale的书写格式为: 语言[_地域[.字符集]]。
所以说呢,locale总是和一定的字符集相联系的。下面举几个例子:
1、我说中文,身处中华人民共和国,使用国标2312字符集来表达字符。zh_CN.GB2312=中文_中华人民共和国+国标2312字符集。
2、我说中文,身处中华人民共和国,使用国标18030字符集来表达字符。zh_CN.GB18030=中文_中华人民共和国+国标18030字符集。
3、我说中文,身处中华人民共和国台湾省,使用国标Big5字符集来表达字符。zh_TW.BIG5=中文_台湾.大五码字符集
4、我说英文,身处大不列颠,使用ISO-8859-1字符集来表达字符。 en_GB.ISO-8859-1=英文_大不列颠.ISO-8859-1字符集
5、我说德语,身处德国,使用UTF-8字符集,习惯了欧洲风格。
de_DE.UTF-8@euro=德语_德国.UTF
-8字符集@按照欧洲习惯加以修正,注意不是
de_DE@euro.UTF
-8,
所以完全的locale表达方式是 [语言[_地域][.字符集] [@修正值]。
其中,与中文输入关系最密切的就是LC_CTYPE,LC_CTYPE规定了系统内有效的字符以及这些字符的分类
,诸如什么是大写字母,小写字母,大小写转换,标点符号、可打印字符和其他的字符属性等方面。而locale定义zh_CN中最最重要的一项就是定义了汉字(Class“hanzi”)这一个大类,当然也是用Unicode描述的,这就让中文字符在Linux系统中成为合法的有效字符,而且不论它们是用什么字符集编码的。
怎样设定locale呢?
设定locale就是设定12大类的locale分类属性,即12个LC_*。除了这12个变量可以设定以外,
为了简便起见,还有两个变量:LC_ALL和LANG。
它们之间有一个优先级的关系:LC_ALL > LC_* >LANG
。
可以这么说,LC_ALL是最上级设定或者强制设定,而LANG是默认设定值。
1、如果你设定了LC_ALL=zh_CN.UTF-8,那么不管LC_*和LANG设定成什么值,它们都会被强制服从LC_ALL的设定,成为 zh_CN.UTF-8。
2、假如你设定了LANG=zh_CN.UTF-8,而其他的LC_*=en_US.UTF-8,并且没有设定LC_ALL的话,那么系统的locale设定以LC_*=en_US.UTF-8。
3、假如你设定了LANG=zh_CN.UTF-8,而其他的LC_*,和LC_ALL均未设定的话,系统会将LC_*设定成默认值,也就是LANG的值zh_CN.UTF-8。
4、假如你设定了LANG=zh_CN.UTF-8,而其他的LC_CTYPE=en_US.UTF-8,其他的LC_*,和LC_ALL均未设定的话,那么系统的locale设定将是:LC_CTYPE=en_US.UTF-8,其余的 LC_COLLATE,LC_MESSAGES等等均会采用默认值,也就是 LANG的值,也就是LC_COLLATE=LC_MESSAGES=……= LC_PAPER=LANG=zh_CN.UTF-8。
所以,locale是这样设定的:
1、如果你需要一个纯中文的系统的话,设定LC_ALL= zh_CN.XXXX,或者LANG=zh_CN.XXXX都可以
,当然你可以两个都设定,但正如上面所讲,LC_ALL的值将覆盖所有其他的locale设定,不要作无用功。
2、如果你只想要一个可以输入中文的环境,而保持菜单、标题,系统信息等等为英文界面,那么只需要设定 LC_CTYPE=zh_CN.XXXX,LANG=en_US.XXXX就可以了。
这样LC_CTYPE=zh_CN.XXXX,而LC_COLLATE=LC_MESSAGES=……= LC_PAPER=LANG=en_US.XXXX。
3、假如你高兴的话,可以把12个LC_*一一设定成你需要的值,打造一个古灵精怪的系统: LC_CTYPE=zh_CN.GBK/GBK(使用中文编码内码GBK字符集); LC_NUMERIC=en_GB.ISO-8859-1(使用大不列颠的数字系统) LC_MEASUREMEN=de_DE@euro.ISO-8859-15(德国的度量衡使用ISO-8859-15字符集) 罗马的地址书写方式,美国的纸张设定……。估计没人这么干吧。
4、假如你什么也不做的话,也就是LC_ALL,LANG和LC_*均不指定特定值的话,系统将采用POSIX作为lcoale,也就是C locale。
另外LANG和LANGUAGE有什么区别呢?
LANG - Specifies the default locale for all unset locale variables
LANGUAGE - Most programs use this for the language of its interface
LANGUAGE是设置应用程序的界面语言。而LANG是优先级很低的一个变量,它指定所有与locale有关的变量的默认值,
posted on 2009-05-18 22:48
jinfeng_wang
阅读(1455)
评论(0)
编辑
收藏
所属分类:
ZZ
、
Linux
新用户注册
刷新评论列表
只有注册用户
登录
后才能发表评论。
网站导航:
博客园
IT新闻
知识库
C++博客
博问
相关文章:
log4jdbc and hibernate
谈谈网站静态化 zz
亿万用户网站MySpace的成功秘密 zz
Web 2.0网站性能调优实践 zz
Network Programming Using Libevent zz
亿级数据的高并发通用搜索引擎架构设计zz
用rsync实现网站镜像和备份 zz
IP别名+TCP转发+端口映射实现跨网络访问zz
文字コードについて(シフトJISの問題) zz
SQL Performance Analyzer in Oracle Database 11g Release 1 zz
Powered by:
BlogJava
Copyright © jinfeng_wang