?? java中文問題詳解.txt
字號:
作者:weljava
email: weljava@263.net
日期:2000-12-14 16:03:40
發(fā)信人: aweiwei (還是學(xué)習(xí)的好), 信區(qū): JAVA
標(biāo) 題: Java中文問題詳解
發(fā)信站: 碧海青天 (Wed Nov 29 09:50:42 2000), 轉(zhuǎn)信
Java中文問題詳解
2000-11-25 10:09
------------------------------------------------------------------------
--------
作者:轉(zhuǎn)載自Java聯(lián)盟論壇
Java中文問題詳解 發(fā)言者:congling 時 間:2000/10/16 22:51:22 來 自:
www.javaunion.org
------------------------------------------------------------------------
--------
我來說一下tomcat如何實現(xiàn)JSP的你就明白了。 預(yù)備知識: 1.字節(jié)和unicode
Java內(nèi)核是unicode的,就連class文件也是,但是很多媒體,包括文件/流的
保存方式 是使用字節(jié)流的。 因此Java要對這些字節(jié)流經(jīng)行轉(zhuǎn)化。char是
unicode的,而byte是字節(jié). Java中byte/char互轉(zhuǎn)的函數(shù)在sun.io的包中間有
。其中ByteToCharConverter類是中調(diào)度, 可以用來告訴你,你用的
Convertor。其中兩個很常用的靜態(tài)函數(shù)是 public static
ByteToCharConverter getDefault() ; public static
ByteToCharConverter getConverter(String encoding); 如果你不指定
converter,則系統(tǒng)會自動使用當(dāng)前的Encoding,GB平臺上用GBK,EN平臺上用
8859_1 我們來就一個簡單的例子: “你“的gb碼是:
0xC4E3 ,unicode是0x4F60 你用: --encoding=“gb2312“;
--byte b[]={(byte)‘u00c4‘,(byte)‘u00E3‘};
--convertor=ByteToCharConverter.getConverter(encoding); --char
[] c=converter.convertAll(b); --for(int i=0;i0xC4,
0x00E3->0xE3,因此0xC4,0xE3被放進了 --文件 ---- 1.對于JSP正文的解釋:
--Tomcat首先看一下你的葉面中有沒有“
http://localhost/test/test.jsp?value=你
結(jié)果:你好你
但這種方法局限性較大,比如對上傳的文章分段,這樣的做法是死定的,最好的
解決方案是用這種方案: 你好
必讀好文,但解決方案不敢恭維 發(fā)言者:小熊 時 間:2000/10/17 17:21:31 來
自:www.javaunion.org
------------------------------------------------------------------------
--------
1.網(wǎng)頁傳參數(shù)不提倡用get方法,而且用戶可以調(diào)整是否用utf-8發(fā)送 2.建議jsp中
最好不要用,實際上加不加這句都有實現(xiàn)中文正常顯示的方案,我認(rèn)為不加方便些,
至少不用寫這些代碼,如下的配置我認(rèn)為可以使中文正常顯示: a.所有的javabean
用iso8859-1編譯 b.jsp文件中不要寫以上charset=gb2312的語句(寫了反而錯)
在tomcat情況下注意以上2點就行---了,等等,對于其他有可能不行的jsp服務(wù)器,加
上以下 c.服務(wù)器上的操作系統(tǒng)語言設(shè)為英文(像沒有裝類似bluepoint中文系統(tǒng)的
linux一般本來就是英文) 就行---了
誰要是還不對,請報告....
Re:必讀好文,但解決方案不敢恭維 發(fā)言者:congling 時 間:2000/10/17 21:
06:23 來 自:www.javaunion.org
------------------------------------------------------------------------
--------
Tomcat的參數(shù)問題無論是GET或是POST方式都是用8859_1編碼的。這個可以看
Tomcat Servlet實現(xiàn)的源代碼: a) 對于POST方法 javax.servlet.http.
HttpUtils的parsePostData方法: (對于POST的Form數(shù)據(jù)) String
postedBody = new String(postedBytes, 0, len, “8859_1“);)這里是沒有問題
的因為中文都會用%來說明。但是parseName這個函數(shù),卻沒有把是中文的東西整合
起來,他只是簡單的拼湊,因此可以認(rèn)定他是使用8859_1的編碼規(guī)則 sb.
append((char) Integer.parseInt(s.substring(i+1, i+3), 16)); ---- i +=
2; -- b) 對于GET方法 org.apache.tomcat.service.http.
HttpRequestAdapter -- line=new String(buf, 0, count,
Constants.CharacterEncoding.Default); ----Constants.CharacterEncoding.
Default=8859_1 這段代碼不好跟蹤,千萬不要被一些假象迷惑住。
HttpRequestAdapter是從RequestImpl中派生的。但是,實際上用8080端口的
Server并沒有直接用到RequestImpl,而是用了HttpRequestAdapter來獲得
queryString
對于加不加encoding,我保留我的意見,因為如果要解決上傳文件分頁問題,必須
要用他來編碼。而且編碼能保證在一些Beans當(dāng)中的傳遞性。
看來我要在這里說明一下了 發(fā)言者:小熊 時 間:1970/01/01 07:59:59 來 自:
www.javaunion.org
------------------------------------------------------------------------
--------
Tomcat僅僅是一個對jsp1.1,servlet2.2的一個標(biāo)準(zhǔn)的實現(xiàn),我們不應(yīng)該要求這個免
費軟件在細(xì)致末節(jié)上和性能上都面面俱到,它主要考慮的英文用戶,這也是為什么不
作特殊轉(zhuǎn)換我們的漢字用url方法傳遞有問題的原因,我們大部分瀏覽器ie其高級設(shè)
置中始終以utf-8發(fā)送url的選項缺省是選上的,如果說這是tomcat的bug也是可以的
,另外Tomcat不管當(dāng)前的操作系統(tǒng)是什么語言,好像都按iso8859去編譯jsp,我覺得
也有點欠妥,但是不管怎么說,新標(biāo)準(zhǔn)的實現(xiàn)和熱門的軟件在語言的支持方面永遠(yuǎn)都
是先考慮英文
我的方案什么說要好一些呢 1.還是那句話,英文國家的軟件永遠(yuǎn)都是先考慮英文,
java虛擬機的規(guī)范中要求虛擬機內(nèi)部必須實現(xiàn)iso8859,unicode,UTF-8三種,其他的
不作要求,我們用的jdk中的虛擬機就是這樣,嵌入式的就更不用說了,也就是說其他
的ENCODE都很可能不是java虛擬機內(nèi)部直接支持的,我們的中文自然也不在其列,需
要外部的包支持轉(zhuǎn)換,sun jdk應(yīng)該在i18n.jar中,用iso8859速度最快,不需要其它
調(diào)用和交換什么的,更沒有讀包的io操作 2.至少少寫了代碼,沒有額外操作,簡潔的
風(fēng)格誰不喜歡 3.所寫的jsp頁面國際性化好,我才寫了一個jsp+javabeans的聊天室
軟件(沒有用到servlet,jsp真的確實很好),同樣的程序美國人用他們的瀏覽器進入
就是英文界面,中文進入就是中文界面,如果加上charset=gb2312至少很麻煩 4.限
定了gb2312,如果用戶要用GBK,怎么辦,不加更好,不管什么的字符集,只要我當(dāng)前瀏
覽器設(shè)定的是,我就能顯示出來
總結(jié):無論從速度上,開發(fā)效率上,和可擴展性上考慮,我的方案都比你的好,另外,我
找不到你的方案比我的好的地方.
廣告服務(wù) | 隱私保護 | 版權(quán)所有 | 聯(lián)系我們
版權(quán)所有 深圳盛亞電腦技術(shù)有限公司 & 深圳天蕭工作室
Copyright (C) 2000 Shenzhen Superasia Computer Technology Co., Ltd.
All Rights Reserved
--
吾本楚狂人,瘋歌笑孔丘
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -