<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    風(fēng)之力

    BlogJava 首頁 新隨筆 聯(lián)系 聚合 管理
      19 Posts :: 2 Stories :: 18 Comments :: 0 Trackbacks

    Java的中文問題歷史悠久,連綿不絕,至今也沒有完全解決,但是上有政策下有對策,我們總是有辦法搞定它的。跟Java相關(guān)的中文問題主要有兩類,一類是編程的問題,涉及到I/O,內(nèi)碼轉(zhuǎn)換等。第二類是Java運(yùn)行環(huán)境的配置,涉及字體,屬性配置等。我剛剛用了一天的時(shí)間解決這些問題,覺得很有必要給自己寫個(gè)備忘錄之類的。

    我看還是從問題入手吧,這樣不致于讓大家打瞌睡。我想寫個(gè)程序,這個(gè)程序有個(gè)基本功能就是顯示文件內(nèi)容,我用JTextArea來做顯示的事情,程序簡單的到家了,但是就是中文都是亂碼。我的配置是JBuilder7,JBuilder自帶的JDK1.3.3_b24,我自己裝的JDK是JDK1.4.0_02_b02,都是主流的JDK。操作系統(tǒng)是英文Windows2000加中文支持包。

    我嘗試換JDK,1.3.3和1.4.0都不行,down一個(gè)最新的j2sdk-1_4_1-rc也是不行,好像不是JDK的問題,于是我就把精力集中到I/O的編碼轉(zhuǎn)換上,我查閱了網(wǎng)上若干關(guān)于JAVA中文問題的文章,把編碼轉(zhuǎn)換搞的倍兒清楚,可是怎么試,換什么編碼折騰都不行,反而顯示的更糟糕,當(dāng)初還是亂的有些規(guī)矩,就是象在純英文系統(tǒng)上顯示的那樣,好歹我還知道那是漢字,只是顯示不出來,等我折騰編碼,就變得都是問號了。唉,郁悶!

    編碼轉(zhuǎn)換心得:

    JAVA內(nèi)部是UNICODE編碼,在I/O時(shí)如果使用Reader/Writer就要發(fā)生編碼轉(zhuǎn)換,使用系統(tǒng)屬性file.encoding作為編碼方式。如果使用Stream就沒有轉(zhuǎn)換的事情了,那是Binary的數(shù)據(jù)。

    有用的方法有:1。在Reader/Writer上加encoding的選項(xiàng),注意編碼的方向,在Reader中的encoding表示把數(shù)據(jù)從encoding轉(zhuǎn)換成Unicode,writer就是把Unicode的字符轉(zhuǎn)換成encoding格式的。2。用String.getByte()把字符串轉(zhuǎn)換成指定編碼。

    常用的編碼格式:ISO8859_1,這個(gè)是英文系統(tǒng)缺省的8bit編碼,因?yàn)槭?bit的,所以不會把漢字的高位刪去,所以用它也是可以處理漢字的(我自己這么理解,總覺得有些不妥,但又不知道不妥在何處,還望高人指出)。GB2312和GBK,漢字編碼,推薦使用GBK,它兼容GB2312并且支持更多漢字。UNICODE,一個(gè)大的字符集,不知是不是國際標(biāo)準(zhǔn)反正大家都支持,使用16位對每個(gè)字符編碼,漢字雖然正合適,但英文卻吃虧了,要用多一倍的空間來存儲,所以很多人還是老大不樂意,寫的程序不支持UNICODE。

    JSP/Servlet的中文問題有兩種解決辦法:1。不在程序中進(jìn)行編碼轉(zhuǎn)換,把這個(gè)工作交給瀏覽器,方法就是用javac –encoding GBK *.java來編譯所有的bean,然后在JSP頁面上加

    <%@ page contentType="text/html;charset=gb2312" %>

    或者是在HTML中直接加:

    到底加那個(gè),試試就知道了,我也搞不清楚了。

    2。在程序中指定編碼,用javac –encoding ISO8859_1 *.java來編譯所有的bean,在涉及到中文顯示的程序上加

    str=new String(str.getBytes("ISO8859_1"));

    上面兩種方法不能混用,意思就是要么就是GBK,要么就是ISO8859_1,從里到外都一樣就好了。

    數(shù)據(jù)庫JDBC的中文問題,一般只要按照數(shù)據(jù)庫指定的編碼進(jìn)行轉(zhuǎn)換,比如按照ISO8859_1讀,ISO8859_1寫,一般就沒什么問題了。

    雖然有這些編碼上的心得,但是并不能解決我的問題。看來我的程序輸入輸出用的都是ISO8859_1,我的問題跟編碼沒什么關(guān)系。是不是字體的問題呢?在Swing的組件中,字體總是那么幾個(gè),基本上是定死的,選那個(gè)都不行。但是我突然發(fā)現(xiàn)可以更改這些字體的配置,就是font.properties 這個(gè)文件,一般JDK都帶了中文的字體配置文件,可能是font.properties.zh之類的,不同版本的JDK名字有些差別,你要做的就是用中文的配置覆蓋font.properties文件。我滿心歡喜的以為成功了,但是失敗無情的又一次打擊了我。不是這種方法不對,但是在Windows系統(tǒng)中,java能夠比較自動(dòng)的檢查你的系統(tǒng)編碼,使用最合適的字體配置文件,一般不需要你改動(dòng)了,在JDK1.2之前確實(shí)是要這么改的,難怪那篇文章是JDK1.1的文檔呢。

    連font.properties也不靈了,唉,是不是JBuilder有問題呀?到了這兒,我不得不懷疑它了,雖然它從沒讓我失望過,我關(guān)掉JBuilder,拿起JDK命令行,哎呀!可愛的中文竟然出來了!簡直是.....莫名其妙呀,因?yàn)镴Builder也是用的這個(gè)JDK呀?沒理由呀,我再次打開JBuilder,運(yùn)行,亂碼!怪事.......我來看看.....我把JBuilder里面的執(zhí)行命令拷貝到DOS窗口里手動(dòng)執(zhí)行....沒有中文.....怪怪怪,我仔細(xì)對照我手敲的命令和JBuilder拷出來的命令,除了我用的是java它用的是javaw之外,別的幾乎都一樣,難道.......這個(gè)java和javaw竟然會不一樣?

    唉.......要我說什么呢,答案就是這個(gè)了,javaw會使用與java不同的Local配置進(jìn)行工作,導(dǎo)致了我一直看不到中文,而java就是好好的。JBuilder也是好好的,沒有問題,調(diào)用javaw也不是它的錯(cuò),難道你想每次運(yùn)行或者調(diào)試的時(shí)候蹦出個(gè)DOS黑框么?呵呵。這是JDK的一個(gè)Bug,我在java的網(wǎng)站上查到這個(gè)bug,描述的情況跟我的一樣,然后Sun說這個(gè)Bug已經(jīng)修復(fù)了,嘿嘿,簡直就是扯淡!修復(fù)個(gè)茄子!Bug編號是:4629351。不信可以去看看。

    但是難道我就不能在JBuilder里面看我可愛的中文了嗎?好像JBuilder5的時(shí)候還能選擇是用java還是javaw,現(xiàn)在好像沒法兒選了。怎么才能讓javaw支持中文呢?經(jīng)過又是一番苦苦查找,竟然沒有什么結(jié)果,郁悶!正當(dāng)苦悶之時(shí),突然想起當(dāng)初配置過UNIX下的TOMCAT,好像加了些啟動(dòng)參數(shù),就能讓tomcat支持中文了,趕快翻出以前的文檔,啊,幸好我當(dāng)初寫了工作心得,要不然又抓瞎了。其實(shí)道理很簡單,就是給JAVA虛擬機(jī)加上一些屬性:

    -Dfile.encoding=GBK -Ddefault.client.encoding=GBK -Duser.language=zh -Duser.region=CN

    把它跟在javaw的命令行后面當(dāng)參數(shù),哈哈,搞定!

    在JBuilder中選擇Project->Project Properties->run->edit->VM Parameters,填上就行了!

    配置心得:

    在JDK低版本和UNIX下,需要改動(dòng)font.properties,讓JAVA VM能夠找到合適的字體來顯示漢字。

    目前為止,javaw有Bug,只使用英文的Local,需要給VM加上屬性才行正常顯示中文。
    文章出處:Java家(www.javajia.com)

    posted on 2007-06-07 10:18 風(fēng)之力 閱讀(507) 評論(0)  編輯  收藏 所屬分類: java
    主站蜘蛛池模板: 日韩毛片免费在线观看| 成人福利在线观看免费视频| 亚欧日韩毛片在线看免费网站| 亚洲精品视频在线观看你懂的| 亚洲欧美日韩一区二区三区| 成年女人毛片免费播放人 | 野花香在线视频免费观看大全| 最好免费观看高清在线| 国产精品国产亚洲精品看不卡| 精品国产呦系列在线观看免费| 中文字幕亚洲天堂| 三级黄色免费观看| 亚洲av无码精品网站| 无码精品人妻一区二区三区免费看 | 一个人看的www在线观看免费| 久久乐国产综合亚洲精品| 在线免费一区二区| 免费一级毛suv好看的国产网站 | 四虎成人精品国产永久免费无码| 亚洲成a人片在线观看久| 国产A∨免费精品视频| 国产日韩亚洲大尺度高清| 99久久免费看国产精品| 亚洲精品免费网站| 亚洲av无码成人精品区| 无码一区二区三区免费| 亚洲成A人片在线播放器| 四虎永久免费地址在线网站| 老司机精品免费视频| 亚洲福利一区二区精品秒拍| 最近中文字幕mv免费高清视频7| 久久亚洲精品11p| 国产精品亚洲аv无码播放| 69精品免费视频| 亚洲av无码无线在线观看| 国产亚洲精品一品区99热| 思思re热免费精品视频66| 亚洲av成人无码网站…| 亚洲精品乱码久久久久久按摩| 国产精品视频免费观看| 四虎国产精品成人免费久久|