Topic: 請教各位一個servlet顯示中文的問題! |
Print this page |
1.請教各位一個servlet顯示中文的問題! | Copy to clipboard |
Posted by: skyler Posted on: 2002-12-20 00:49 剛接觸servlet新手 有個問題想向各位請教一下! 還請不吝指教! 我在執行下列程式時,browser顯示出的中文是「??」, 想請教各位是否還需在程式上加入code才能正常顯示? 還是在TOMCAT上做設定(但如果是在TOMCAT做設定,那如果顯示不同編碼是否也會出現亂碼?) 環境:tomcat3.3 jdk1.41 win2000 謝謝各位! import java.io.*; import javax.servlet.*; import javax.servlet.http.*; public class HelloWorld extends HttpServlet { public void doGet( HttpServletRequest req, HttpServletResponse res ) throws ServletException, IOException { res.setContentType( "text/html" ); PrintWriter out = res.getWriter(); out.println( "" ); out.println( "" ); out.println( "" ); out.println( "您好" ); out.println( "" ); } } |
2.可以用setContentType设置返回页面的charset试试看。 [Re: skyler] | Copy to clipboard |
Posted by: jmd7 Posted on: 2002-12-20 01:27 可以用setContentType设置返回页面的charset试试看。 |
3.Re:請教各位一個servlet顯示中文的問題! [Re: skyler] | Copy to clipboard |
Posted by: David_Zhuo Posted on: 2002-12-20 12:14 加入 req.setCharacterEncoding("GBK"); 试试看行不行。 |
4.Re:請教各位一個servlet顯示中文的問題! [Re: skyler] | Copy to clipboard |
Posted by: skyler Posted on: 2002-12-22 23:03 不行耶... tomcat 的server.xml 是否能夠設定language! |
5.response.setContentType(CONTENT_TYPE); [Re: skyler] | Copy to clipboard |
Posted by: dissip Posted on: 2002-12-23 17:31 String CONTENT_TYPE = "text/html; charset=GBK"; |
6.Re:請教各位一個servlet顯示中文的問題! [Re: skyler] | Copy to clipboard |
Posted by: skyler Posted on: 2002-12-25 00:50 可以了! 感激您的回答! 想順便請教一下charset的值在那可以查到還有那些! 我看API的資料好像沒有看到! 再次請教 謝謝! |
7.编码方式 [Re: skyler] | Copy to clipboard |
Posted by: dissip Posted on: 2002-12-25 14:32 tomcat 使用的是java的编码方式,就是说,只要启动tomcat的jdk支持的编码方式都可在这里使用。 而java的编码方式在java.nio.charset.Charset中的描述: Every implementation of the Java platform is required to support the following standard charsets. Consult the release documentation for your implementation to see if any other charsets are supported. US-ASCII Seven-bit ASCII, a.k.a. ISO646-US, a.k.a. the Basic Latin block of the Unicode character set ISO-8859-1 ISO Latin Alphabet No. 1, a.k.a. ISO-LATIN-1 UTF-8 Eight-bit UCS Transformation Format UTF-16BE Sixteen-bit UCS Transformation Format, big-endian byte order UTF-16LE Sixteen-bit UCS Transformation Format, little-endian byte order UTF-16 Sixteen-bit UCS Transformation Format, byte order identified by an optional byte-order mark |
8.转载 from gerrykuo [Re: skyler] | Copy to clipboard |
Posted by: dissip Posted on: 2002-12-25 14:48 我這一兩個月利用下班時間寫了一個用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不會有這個問題。 我想這多少也刺激他們迅速的改進。 |
9.萬分感謝dissip兄!!! [Re: skyler] | Copy to clipboard |
Posted by: skyler Posted on: 2002-12-26 00:46 真的很感激您這麼詳細的解說,特別是在末幾段的一些心得,更是令人收獲非淺! 在台灣用JAVA的就如您所言真的不多,也因此很難在資訊整合這個產業上看到用JAVA開發案子(小弟現在正在系統整合公司上班),不外乎就是穩定性與performance,所以許多公司都不敢導入jsp、servlet,而以asp....等來代替。 謝謝您的經驗,使我吸收不少。 |
Powered by Jute Powerful Forum® Version Jute 1.5.6 Ent Copyright © 2002-2021 Cjsdn Team. All Righits Reserved. 闽ICP备05005120号-1 客服电话 18559299278 客服信箱 714923@qq.com 客服QQ 714923 |