📄 1654.html
字号:
<br>
也许我错了,但我的感觉是犯低级错误的不是JAVA SOFT,因为JAVA应用的本地化不是在WEB应用这一层实现的,而是JVM的系统缺省编码方式根据操作系统的环境设置(locale)改变来实现。在文章发表在2000年年底,当时的LINUX对中文的locale支持还有限,因此,在LINUX上不能根据locale的设置将系统缺省的编码方式变成GB2312,从而改变JVM缺省的编码方式。<br>
关于LINUX对l10n的支持请看:linux程序员必读:中文化与GB18030标准<br>
<br>
如何设置可以让LINUX从系统层次就支持中文编码(系统缺省的file.encoding就按照中文编码解码)呢?<br>
<br>
所以在redhat6.x下,无论你怎么设置locale,系统缺省的缺省file.encoding都是ISO_8859_1 因为redhat6.2是基于 glibc-2.1.x的。在redhat7.x 系统内核所基于的glibc-2.2.x对l10n有了更完整的支持,所以可以通过设置<br>
LC_ALL=zh_CN.GB2312;export LC_ALL<br>
LANG=zh_CN.GB2312;export LANG<br>
让系统缺省的编码方式变成GB2312 GBK...从而改变JVM的缺省编码方式(file.encoding),之后,任何字节流到字符流的转换,JVM都会按照系统缺省编码方式进行转换。<br>
<br>
在基于glibc2.2以上的linux上:是可以通过locale的设置来改变系统缺省的编码方式,从而改变应用的缺省编码、解码方式的。<br>
<br>
这里有2点我想说明:<br>
<br>
1 为商业性操作系统说句公道话:linux对国际化的支持远远落后于WINDOWS SOLARIS等商业操作系统:2年甚至更多。<br>
2 linux是依靠GNU的工具发展起来的:没有GNU就没有Linux。所以Linux对本地化的支持,也是在核心的glibc-2.2.x对中文locale有了更好的支持以后才逐步发展起来的。<br>
<br>
通过web.xml设置解决URLEncoder.encode()方法和系统缺省编码方式相关的问题<br>
<br>
据我所理解的范围内,JDK1.3中非常不符合JAVA的国际化规范的是在使用URLEncoder的时候:<br>
比如在中文WIN98上运行的应用,使用URLEncoder.encode(String s)时:比如“中文”这2个字直接被Encoding的话结果是"%3F%3F"=>"??"。原因很简单,“中文”在encode()过程中需要先按GBK编码方式编码成4个BYTE后再URLEncoding才是正确的。这个在JDK1.4中也修正了。方法encode(String s)已经不鼓励使用,取而代之的是除了需要进行URLEncoding的字符串外,同时需要指定字符串编码方式的encode(String s, String enc)。这样,URLEncoder就可以和系统缺省的编码方式无关了。<br>
<br>
在JDK1.3下,一个基于web-app框架的应用中,这个问题可以通过在WEB-INF/web.xml中设置来解决:<br>
<web-app character-encoding="your_system_default_file.encoding"><br>
...<br>
</web-app><br>
<br>
<br>
如果产品是在中文WINDOWS98运行,缺省字符集是用GBK,则这个应用的web.xml需要设置成:<br>
<web-app character-encoding="GBK"><br>
...<br>
</web-app><br>
<br>
Unicode inside Locale outsite<br>
<br>
以上2个方法仍然只是让应用更方便地本地化了,而应用本身并不是真正的国际化应用。设想一下如何设计一个全球的论坛系统:可以让中文和日文的用户都可以方便的浏览发表呢?在数据中间处理阶段应该以那种字符集存储呢?答案很简单:Unicode。以前很多文章都有关于如何设计一个国际化界面的介绍,只是国际化应用的界面输出,但很少提及数据的输入和存储阶段就需要考虑应用以后的国际化,应使用UNICODE处理和存储。最后,我以GOOGLE的国际语言搜索引擎做一个设计实例说明如何实现国际化应用的设计:GOOGLE是一个非常好的国际化应用榜样(但我可没说GOOGLE是java做的哟)。<br>
<br>
GOOGLE用户经常有这样的感觉:<br>
为什么我第一次去GOOGLE,出现的就是中文的界面?<br>
为什么在所有网站中查中文:有时候还会出日文网站的结果?比如:"google 秘密"<br>
<br>
就以"google 秘密"这个查询为例:我们在输入框输入"google 秘密"<br>
http://www.google.com/search?hl=zh-CN&newwindow=1&q=google+%C3%D8%C3%DC&btnG=Google%CB%D1%CB%F7&lr=<br>
<br>
将处理流程简单的说明如下:<br>
输入:查询(按客户端编码方式)=>GOOLGE(将输入的字节流“解码”成UNICODE)=>查询索引(也是UNICODE的)=>UNICODE的结果集=>输出:查询结果,“编码”成客户端系统编码方式的字节流<br>
<br>
具体说明:<br>
<br>
* GOOGLE如何识别出浏览器使用的“界面语言”:GOOGLE获得这个查询字符串的同时,一般会根据hl=zh-CN这个参数,知道了客户端使用的字符集编码方式,如果用户第一次访问:GOOGLE会根据浏览器的发送的请求中包含的Accept language: zh_cn这个头信息来判别,这就是为什么现在很多用户第一次去GOOGLE的时候它就能自动识别出来的原因。这个参数在之后的查询和翻页过程中通过cookie保存,并通过get方式一直传递给GOOGLE(因此你也可以使用使用偏好设置界面语言),从而可靠地识别出客户端的编码方式。<br>
* GOOGLE如何查询:也许从URL上你可以看到:传过去的“秘密”这个查询实际上是%C3%D8%C3%DC=>"秘密"这2个字按GBK(WINDOWS客户端缺省的编码方式)编码方式的4个字节URLEncode后的形式(关于中文编码方式请参考:汉字的编码方式),GOOGLE将查询字符串按这个编码方式解码并转成UNICODE,然后用这个UNICODE编码方式的字符串进行内部的查询操作。而任何语言的页面都是先转换成UNICODE后存储在GOOGLE的数据索引库里的。在UNICODE中日文和中文写法一样的字,用的是同样的编码。因此,如果你没有指定语言过滤的话,日文网页的结果就首先被命中了;因此,对于中文客户端的查询:如果在UNICODE中映射的字一样,就可以查询到相应的日文网页,繁体中文网页...,GOOGLE的查询结果也首先是UNICODE的,最后将UNICODE结果按照客户端的编码方式转换成字节流,返回到客户端。<br>
<br>
从以上的分析中我们可以看出:UNICODE非常漂亮的解决了应用的国际化问题<br>
<br>
1. 数据从输入的开始,就全部先转换成UNICODE,然后再进行处理,并按照UNICODE方式集中存储(Unicode inside)<br>
2. 数据输出过程中,只是在最后输出到客户端的时候,按照客户端的本地化设置将UNICODE数据转换成本地字符集,并配以相应语言/字符的界面(Locale outside)<br>
<br>
“汉化”思路的根源在于我们的软件开发中满足于自给自足的小农意识,Microsoft和Sun等国际化大公司的产品从一开始就是为世界市场设计的。如果在此之前的应用的汉化设计相当于UCDOS和RichWin的话,那么这种汉化方式迟早要被内核汉化的WIN95淘汰的。毕竟核心级别对国际化的支持才是一个真正简化前端应用设计,通用的解决方案,国内软件行业对相应国际标准显然重视不足,而不用提什么积极参与标准制定了。<br>
<br>
参考文档:<br>
Java的国际化设计<br>
http://java.sun.com/docs/books/tutorial/i18n/index.html<br>
<br>
linux 国际化本地化和中文化<br>
http://www.linuxforum.net/doc/i18n-new.html<br>
<br>
linux 程序员必读:中文化与GB18030标准<br>
http://www.ccidnet.com/tech/os/2001/07/31/58_2811.html<br>
<br>
Unicode FAQ<br>
http://www.cl.cam.ac.uk/~mgk25/unicode.html<br>
http://www.linuxforum.net/books/UTF-8-Unicode.html (中文版)<br>
<br>
Java 编程技术中汉字问题的分析及解决<br>
http://www-900.ibm.com/developerWorks/java/java_chinese/index.shtml<br>
<br>
汉字的编码方式:<br>
http://www.unihan.com.cn/cjk/ana17.htm<br>
<br>
*注释:l10n i18n都是缩写:用的是英文单词的首尾字母和其间字母个数<br>
l10n: localization 本地化<br>
i18n: internationalization 国际化<br>
<br>
<<返回<br>
</FONT><br>
</TD>
</TR>
<TR>
<TD colSpan=2><FONT
class=middlefont></FONT><BR>
<FONT
class=normalfont>全文结束</FONT> </TD>
</TR>
<TR>
<TD background="images/dot.gif" tppabs="http://www.linuxhero.com/docs/images/dot.gif" colSpan=2
height=10></TD></TR></TBODY></TABLE></TD></TR></TBODY></TABLE></DIV></TD>
<TD vAlign=top width="20%"
background="images/line.gif" tppabs="http://www.linuxhero.com/docs/images/line.gif" rowSpan=2>
<DIV align=center>
<table class=tableoutline cellspacing=1 cellpadding=4
width="100%" align=center border=0>
<tr class=firstalt>
<td noWrap background="images/bgline.gif" tppabs="http://www.linuxhero.com/docs/images/bgline.gif" colspan=2 height=21>
<font class=normalfont><b>所有分类</b></font></td>
</tr>
<tr class=secondalt> <td noWrap width=27%> <font class=normalfont>1:</font> </td><td noWrap width=73%> <table width=100% border=0> <tr> <td><font class=normalfont><a href="type1.html" tppabs="http://www.linuxhero.com/docs/type1.html">非技术类</a></font></td> </tr> </table></td></tr><tr class=firstalt> <td noWrap width=27%> <font class=normalfont>2:</font> </td><td noWrap width=73%> <table width=100% border=0> <tr> <td><font class=normalfont><a href="type2.html" tppabs="http://www.linuxhero.com/docs/type2.html">基础知识</a></font></td> </tr> </table></td></tr><tr class=secondalt> <td noWrap width=27%> <font class=normalfont>3:</font> </td><td noWrap width=73%> <table width=100% border=0> <tr> <td><font class=normalfont><a href="type3.html" tppabs="http://www.linuxhero.com/docs/type3.html">指令大全</a></font></td> </tr> </table></td></tr><tr class=firstalt> <td noWrap width=27%> <font class=normalfont>4:</font> </td><td noWrap width=73%> <table width=100% border=0> <tr> <td><font class=normalfont><a href="type4.html" tppabs="http://www.linuxhero.com/docs/type4.html">shell</a></font></td> </tr> </table></td></tr><tr class=secondalt> <td noWrap width=27%> <font class=normalfont>5:</font> </td><td noWrap width=73%> <table width=100% border=0> <tr> <td><font class=normalfont><a href="type5.html" tppabs="http://www.linuxhero.com/docs/type5.html">安装启动</a></font></td> </tr> </table></td></tr><tr class=firstalt> <td noWrap width=27%> <font class=normalfont>6:</font> </td><td noWrap width=73%> <table width=100% border=0> <tr> <td><font class=normalfont><a href="type6.html" tppabs="http://www.linuxhero.com/docs/type6.html">xwindow</a></font></td> </tr> </table></td></tr><tr class=secondalt> <td noWrap width=27%> <font class=normalfont>7:</font> </td><td noWrap width=73%> <table width=100% border=0> <tr> <td><font class=normalfont><a href="type7.html" tppabs="http://www.linuxhero.com/docs/type7.html">kde</a></font></td> </tr> </table></td></tr><tr class=firstalt> <td noWrap width=27%> <font class=normalfont>8:</font> </td><td noWrap width=73%> <table width=100% border=0> <tr> <td><font class=normalfont><a href="type8.html" tppabs="http://www.linuxhero.com/docs/type8.html">gnome</a></font></td> </tr> </table></td></tr><tr class=secondalt> <td noWrap width=27%> <font class=normalfont>9:</font> </td><td noWrap width=73%> <table width=100% border=0> <tr> <td><font class=normalfont><a href="type9.html" tppabs="http://www.linuxhero.com/docs/type9.html">输入法类</a></font></td> </tr> </table></td></tr><tr class=firstalt> <td noWrap width=27%> <font class=normalfont>10:</font> </td><td noWrap width=73%> <table width=100% border=0> <tr> <td><font class=normalfont><a href="type10.html" tppabs="http://www.linuxhero.com/docs/type10.html">美化汉化</a></font></td> </tr> </table></td></tr><tr class=secondalt> <td noWrap width=27%> <font class=normalfont>11:</font> </td><td noWrap width=73%> <table width=100% border=0> <tr> <td><font class=normalfont><a href="type11.html" tppabs="http://www.linuxhero.com/docs/type11.html">网络配置</a></font></td> </tr> </table></td></tr><tr class=firstalt> <td noWrap width=27%> <font class=normalfont>12:</font> </td><td noWrap width=73%> <table width=100% border=0> <tr> <td><font class=normalfont><a href="type12.html" tppabs="http://www.linuxhero.com/docs/type12.html">存储备份</a></font></td> </tr> </table></td></tr><tr class=secondalt> <td noWrap width=27%> <font class=normalfont>13:</font> </td><td noWrap width=73%> <table width=100% border=0> <tr> <td><font class=normalfont><a href="type13.html" tppabs="http://www.linuxhero.com/docs/type13.html">杂项工具</a></font></td> </tr> </table></td></tr><tr class=firstalt> <td noWrap width=27%> <font class=normalfont>14:</font> </td><td noWrap width=73%> <table width=100% border=0> <tr> <td><font class=normalfont><a href="type14.html" tppabs="http://www.linuxhero.com/docs/type14.html">编程技术</a></font></td> </tr> </table></td></tr><tr class=secondalt> <td noWrap width=27%> <font class=normalfont>15:</font> </td><td noWrap width=73%> <table width=100% border=0> <tr> <td><font class=normalfont><a href="type15.html" tppabs="http://www.linuxhero.com/docs/type15.html">网络安全</a></font></td> </tr> </table></td></tr><tr class=firstalt> <td noWrap width=27%> <font class=normalfont>16:</font> </td><td noWrap width=73%> <table width=100% border=0> <tr> <td><font class=normalfont><a href="type16.html" tppabs="http://www.linuxhero.com/docs/type16.html">内核技术</a></font></td> </tr> </table></td></tr><tr class=secondalt> <td noWrap width=27%> <font class=normalfont>17:</font> </td><td noWrap width=73%> <table width=100% border=0> <tr> <td><font class=normalfont><a href="type17.html" tppabs="http://www.linuxhero.com/docs/type17.html">速度优化</a></font></td> </tr> </table></td></tr><tr class=firstalt> <td noWrap width=27%> <font class=normalfont>18:</font> </td><td noWrap width=73%> <table width=100% border=0> <tr> <td><font class=normalfont><a href="type18.html" tppabs="http://www.linuxhero.com/docs/type18.html">apache</a></font></td> </tr> </table></td></tr><tr class=secondalt> <td noWrap width=27%> <font class=normalfont>19:</font> </td><td noWrap width=73%> <table width=100% border=0> <tr> <td><font class=normalfont><a href="type19.html" tppabs="http://www.linuxhero.com/docs/type19.html">email</a></font></td> </tr> </table></td></tr><tr class=firstalt> <td noWrap width=27%> <font class=normalfont>20:</font> </td><td noWrap width=73%> <table width=100% border=0> <tr> <td><font class=normalfont><a href="type20.html" tppabs="http://www.linuxhero.com/docs/type20.html">ftp服务</a></font></td> </tr> </table></td></tr><tr class=secondalt> <td noWrap width=27%> <font class=normalfont>21:</font> </td><td noWrap width=73%> <table width=100% border=0> <tr> <td><font class=normalfont><a href="type21.html" tppabs="http://www.linuxhero.com/docs/type21.html">cvs服务</a></font></td> </tr> </table></td></tr><tr class=firstalt> <td noWrap width=27%> <font class=normalfont>22:</font> </td><td noWrap width=73%> <table width=100% border=0> <tr> <td><font class=normalfont><a href="type22.html" tppabs="http://www.linuxhero.com/docs/type22.html">代理服务</a></font></td> </tr> </table></td></tr><tr class=secondalt> <td noWrap width=27%> <font class=normalfont>23:</font> </td><td noWrap width=73%> <table width=100% border=0> <tr> <td><font class=normalfont><a href="type23.html" tppabs="http://www.linuxhero.com/docs/type23.html">samba</a></font></td> </tr> </table></td></tr><tr class=firstalt> <td noWrap width=27%> <font class=normalfont>24:</font> </td><td noWrap width=73%> <table width=100% border=0> <tr> <td><font class=normalfont><a href="type24.html" tppabs="http://www.linuxhero.com/docs/type24.html">域名服务</a></font></td> </tr> </table></td></tr><tr class=secondalt> <td noWrap width=27%> <font class=normalfont>25:</font> </td><td noWrap width=73%> <table width=100% border=0> <tr> <td><font class=normalfont><a href="type25.html" tppabs="http://www.linuxhero.com/docs/type25.html">网络过滤</a></font></td> </tr> </table></td></tr><tr class=firstalt> <td noWrap width=27%> <font class=normalfont>26:</font> </td><td noWrap width=73%> <table width=100% border=0> <tr> <td><font class=normalfont><a href="type26.html" tppabs="http://www.linuxhero.com/docs/type26.html">其他服务</a></font></td> </tr> </table></td></tr><tr class=secondalt> <td noWrap width=27%> <font class=normalfont>27:</font> </td><td noWrap width=73%> <table width=100% border=0> <tr> <td><font class=normalfont><a href="type27.html" tppabs="http://www.linuxhero.com/docs/type27.html">nfs</a></font></td> </tr> </table></td></tr><tr class=firstalt> <td noWrap width=27%> <font class=normalfont>28:</font> </td><td noWrap width=73%> <table width=100% border=0> <tr> <td><font class=normalfont><a href="type28.html" tppabs="http://www.linuxhero.com/docs/type28.html">oracle</a></font></td> </tr> </table></td></tr><tr class=secondalt> <td noWrap width=27%> <font class=normalfont>29:</font> </td><td noWrap width=73%> <table width=100% border=0> <tr> <td><font class=normalfont><a href="type29.html" tppabs="http://www.linuxhero.com/docs/type29.html">dhcp</a></font></td> </tr> </table></td></tr><tr class=firstalt> <td noWrap width=27%> <font class=normalfont>30:</font> </td><td noWrap width=73%> <table width=100% border=0> <tr> <td><font class=normalfont><a href="type30.html" tppabs="http://www.linuxhero.com/docs/type30.html">mysql</a></font></td> </tr> </table></td></tr><tr class=secondalt> <td noWrap width=27%> <font class=normalfont>31:</font> </td><td noWrap width=73%> <table width=100% border=0> <tr> <td><font class=normalfont><a href="type31.html" tppabs="http://www.linuxhero.com/docs/type31.html">php</a></font></td> </tr> </table></td></tr><tr class=firstalt> <td noWrap width=27%> <font class=normalfont>32:</font> </td><td noWrap width=73%> <table width=100% border=0> <tr> <td><font class=normalfont><a href="type32.html" tppabs="http://www.linuxhero.com/docs/type32.html">ldap</a></font></td> </tr> </table></td></tr> </table>
</DIV></TD></TR>
<TR vAlign=top>
<TD width="80%">
<DIV align=center><BR>
</DIV>
</TD></TR></TBODY></TABLE></TD></TR>
</TABLE></TD></TR>
</TABLE>
<TABLE cellSpacing=0 cellPadding=4 width="100%" bgColor=#eeeeee
border=0><TBODY>
<TR>
<TD width="50%">
<P><FONT class=middlefont>版权所有 © 2004 <A
href="mailto:bjchenxu@sina.com">linux知识宝库</A><BR>
违者必究. </FONT></P>
</TD>
<TD width="50%">
<DIV align=right><FONT class=middlefont>Powered by: <A
href="mailto:bjchenxu@sina.com">Linux知识宝库</A> Version 0.9.0 </FONT></DIV>
</TD></TR></TBODY></TABLE>
<CENTER></CENTER></TD></TR>
</TABLE></CENTER></BODY></HTML>
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -