Linux/OpenSource 社群的秘密花園
  文件搜尋 | 新聞  專欄  論壇  軟評  問答  資源  聊天  人物 | 簡繁  寫作  工作  專案  購物 | 線上教室 | 付費會員 | 本站地圖 文章總覽 
  首頁 > 主題論壇 > Java Server Side 技術 > 一般討論區  板主 : brent  
討論區 : 我有話要說
  發表文章  |  文章首頁  |  頁數 : 1 2 3 4 5 >> |  模式 : 條列 / 展開 / 時間  |  文章搜尋 群數 : 450 篇數 : 1075  

  • Java Server Side 中文解決方案
     Java Server Side 中文解決方案
     作者 : gerrykuo   站內信箱社群網頁(評分 : 2.00)
    05/06(一) 08:38am 
    在這個網站上看了很多文章關於在Java裡面使用中文的方法,只有嘆氣搖頭。
    為什麼要用getBytes然後再轉BIG5呢?這種解決方法從一開始根本就錯了。

    最好的解決方法是從資料進來的時候就要正確的抓到資料。

    我這一兩個月利用下班時間寫了一個用Java Servlet以及XML/XSL來作的留言
    板,同時支援簡體、繁體,甚至日文的輸入與顯示,這是怎麼做到的呢?很
    簡單,利用Unicode。

    我的servlet處理中文只要兩個指令:
    response.setContentType("text/html;charset=UTF-8");
    request.setCharacterEncoding("UTF-8");  (此功能j2ee 1.3就有了)

    之後不管你要getParameter或是printWriter.write都可以把所有的String直接
    拿來用,不用再做什麼轉換。存到database裡面的資料也是直接儲存unicode。
    我用的資料庫是PostgreSQL因為它是唯一支援Unicode的開放軟體資料庫(唯一
    要注意的是PostgreSQL在initdb要用SQL-ASCII或是UNICODE,不能用
    mule-internal,如果你用過PostgreSQL應該知道我在講什麼)。你如
    果用的是Oracle或SQLserver, DB2他們的新版應該都是支援Unicode的。mySQL
    雖然很快,但是它的功能實在不足(也沒有支援unicode),尤其JDBC的driver
    還沒有官方版,不用也罷。
    我本來想移植到mySQL上,但是它竟然連resultSet.isBeforeFirst()都沒有
    實作,那我怎麼判斷結果有沒有資料啊?

    你會說,但是user輸入的是BIG5啊?別擔心,browser早就幫你解決這個問題了。
    只要你用response.setContentType("text/html;charset=UTF-8");接下來雖然
    你輸入的是big5,但是當browser送出來的時候,它就會根據charset來作編碼轉換。
    這樣我們再設request.setCharacterEncoding("UTF-8");然後你用getParameter
    時它就會把UTF-8轉成真正的unicode。

    這個就是系統的美妙之處了,當你在簡體的系統上看同樣的page時,因為文件的
    內容Java已經幫你從unicode轉成UTF-8了,所以你還是可以看到繁體字,而你在
    reply這篇文章時雖然用的是GB,但是當從browser送出來的時候,它又轉成UTF-8
    了,然後我們的程式一樣處理,當你回到繁體系統來看,又可以看到剛剛發的
    簡體的reply。

    如果你在英文的系統下,想要copy一篇中文文章進來,絕對不能用BIG5直接貼,
    因為這時系統的default encoding不對,轉碼會錯。這時你要先用browser先把
    文章讀出來,把"中文字"(不是BIG5碼)copy,貼進來。因為當你在browser裡面
    看到中文字時,這個中文字已經是用unicode在顯示了。

    所以這個解決方案才能真正做到: "所見即所得"。也就是說,只要你看得到你
    輸入的東西,你就可以看到你想要的輸出結果。這也就是你在英文環境下,貼
    BIG5的"亂碼",這個程式也會回big5的"亂碼"給你的原因。

    Unicode是Java一個對國際化/本土化很好的支援,我們要好好利用這個優點,
    做出以前想都沒辦法想的軟體。LinuxFab雖然可以顯示繁體與簡體,但我若是
    大陸的使用者,沒看到"簡繁"那小小的兩個字,而在繁體的網頁輸入了簡體呢?
    會有問題。除了用unicode,其他解決的方法都會很複雜,現在Java對server 
    side的國際化支援算是完整了(1.3之前沒有request.setCharaterEncoding(),
    總是礙手礙腳),希望大家不要在把unicode當成是不如php, perl的缺點,東
    拼西湊的湊到可以顯示中文;把精力放在程式本身,而不是轉碼上。

    台灣用Java的人還是不多,尤其是企業;理由不外是performance, 穩定性。
    但是你如果知道美國的嘉信理財(我工作的公司),擁有全世界最強大的商用
    超級電腦,我們的程式已經有大約20-30%轉換成Java,轉換的工作還在繼續
    中,那你會怎麼想?Server side的Java有絕大多數CGI無法比擬的優點:Thread
    執行序,在只比較一個request的時候,CGI會佔優勢,但是當成百上千個
    request來的時候,Thread的優勢就會出來。我們公司也是在比較過兩者的
    表現之後,才決定進行CGI到Java的轉換的。

    我的工作是把這些Java的功能加以中文化來提供給住在美國的華裔,對於Java
    中文化的問題已經研究了快兩年了,期間碰過不少問題,幸而跟我們合作的IBM
    對於我們提出的問題都能迅速改進,所以我還能保住我的工作。其實這些問題,
    在apache, tomcat等等的開放原始碼都已經解決了,我真的不得不佩服這些熱
    心的人。所以每次我的問題提出來之後,都還會附加:Tomcat不會有這個問題。
    我想這多少也刺激他們迅速的改進。 

    回應本篇  |  回應為新文章  |  刪除本篇

     RE: Java Server Side 中文解決方案
     作者 : antony6333   站內信箱社群網頁(評分 : 2.00)
    05/06(一) 11:57am 
    我一直在找簡繁共存的方法,
    謝謝你,我踹踹(try try)看 

    回應本篇  |  回應為新文章  |  刪除本篇

     RE: Java Server Side 中文解決方案
     作者 : edwardwen   站內信箱社群網頁(評分 : 2.00)
    05/08(三) 11:22am 
    gerrykuo 您好,

    可否跟您請教一個問題, 我如果在 Red hat 7.2 用 JAVA 寫一個檔案, 
    要如何去處理中文字的問題, 因為我只能看到一堆問號..
    謝謝
     

    回應本篇  |  回應為新文章  |  刪除本篇

     RE: Java Server Side 中文解決方案
     作者 : cylin49   站內信箱社群網頁(評分 : 2.00)
    05/09(四) 09:09am 
    : $ cd /etc/X11/fs ; more config ;
    看一下你的 big5 true type 字型放在那個目錄.
    假設是放在 /usr/share/fonts/zh_TW/TrueType.
    $ cd /usr/share/fonts/zh_TW/TrueType ;
    $ more fonts.dir ;
    應該有下面這一行,(... 表示很多字我省略了)
    --> bkai00mp.ttf -arphic-...-c-0-big5-0
    $ cd $JAVA_HOME/jre/lib ;
    $ cp font.properties.zh.Turbo font.properties.zh
    $ vi font.properties.zh
    將所有...-c-*-gbk-0改成 -arphic-...-c-0-big5-0
    如此就可使用big5中文了.

    回應本篇  |  回應為新文章  |  刪除本篇

     RE: Java Server Side 中文解決方案
     作者 : cylin49   站內信箱社群網頁(評分 : 2.00)
    05/09(四) 09:23am 
    java 內部是使用UNICODE,我們的字型是 big5,故在做I/O時不
    要用xxxxStream,應使用Reader/Writer.
    可至 www.javasoft.com download java tutorial,
    其中 internationalization 章節有提到國際化的問題.
    亦可至 www.javaworld.com , 那裡有很多 java 文章. 

    回應本篇  |  回應為新文章  |  刪除本篇

     RE: Java Server Side 中文解決方案
     作者 : edwardwen   站內信箱社群網頁(評分 : 2.00)
    05/09(四) 02:52pm 
    謝謝 cylin49 兄的建議, 我的問題已經解決, 我使用的方法如下

    FileOutputStream fw = null;
    Writer bw = null;
    ......
    fw = new FileOutputStream(dir+"/"+filename);
    bw = new OutputStreamWriter(fw, "Big5");
    ......
    // 作寫檔的動作
    ......
    bw.close();  

    回應本篇  |  回應為新文章  |  刪除本篇

     RE: Java Server Side 中文解決方案
     作者 : tomy   站內信箱社群網頁(評分 : 2.00)
    05/14(二) 10:47am 
    UTF-8 is a simple way to work around, but what if the client
    doesn't support Unicode at all, e.g., smart phones?  

    回應本篇  |  回應為新文章  |  刪除本篇

    
開板緣由
經由 Java Servlet 的新技術,使用者得以更輕易的撰寫 Server Side 的 Web 應用程式,而由 Java Servlet 所衍生的 Java Server Page(JSP),則讓使用者以另一種表現方式來發揮 Java 在網路應用 上的高效能。開這個論壇讓 Java 相關應用的玩家們彼此分享...

備忘錄
[26]網路資源
[04]FAQ
[25]中文FAQ
[07]JSP VS PHP
[05]Server比較
[01]FreeBSD的Java
[06]教學文章
[討論區]

常駐論壇
RedHat Linux
Mandrake Linux
Slackware Linux
Debian GNU/Linux
SuSE Linux
Open Linux
Corel Linux
Turbo Linux
Perl 程式語言
Python 程式語言
Shell script 程式語言
正規表示式與字串處理
XML 理論與應用
Kylix 整合發展環境
Tcl/Tk 程式語言
PHP 網頁設計語言
Mail 系統(Send/Qmail)
Apache 網站伺服器
Java Server Side 技術
Samba Server
DNS 網域名稱伺服器
Linux Security 安全性
Zope 網站出版系統
Proxy 伺服器
Mail 系統(Postfix)
MySQL 資料庫
PostgreSQL 資料庫
Oracle 資料庫
Informix 資料庫
IBM DB2 資料庫
Sybase 資料庫
Linux 安裝 DIY
筆記型電腦安裝 Linux
CLE 與軟體中文化
X Window/X11 技術
KDE/QT 程式設計論壇
GNOME/GTK 程式設計論壇
Linux 3D 繪圖技術
BeOS 作業系統
SETI@home 探測計畫
辦公室(Office)軟體
GIMP
Linux Kernel 論壇
Linux 嵌入式系統應用
Linux 網管經驗分享