自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

Servlet源文件的轉(zhuǎn)移

開發(fā) 后端
本文介紹Servlet源文件的轉(zhuǎn)移,以及討論Servlet的編譯過程并跟蹤其中的中文變化。

Servlet源文件是以“.Java”結(jié)尾的文本文件。我們將討論Servlet的編譯過程并跟蹤其中的中文變化。

用“Javac”編譯Servlet源文件。Javac可以帶“-encoding ”參數(shù),意思是“用< Compile-charset >中指定的編碼來解釋Servlet源文件”。

源文件在編譯時,用來解釋所有字符,包括中文字符和ASCII字符。然后把字符常量轉(zhuǎn)變成Unicode字符。最后,把Unicode轉(zhuǎn)變成UTF。

在Servlet中,還有一個地方設(shè)置輸出流的CharSet。通常在輸出結(jié)果前,調(diào)用HttpServletResponse的setContent Type方法來達(dá)到與在JSP中設(shè)置一樣的效果,稱之為。
注意:文中一共提到了三個變量:、和。其中,JSP文件只與有關(guān),而和只與Servlet有關(guān)。
看下例:

  1. import Javax.servlet.*;  
  2. import Javax.servlet.http.*;  
  3. Class testServlet extends HttpServlet  
  4. {  
  5. public void doGet(HttpServletRequest req,HttpServletResponse resp)  
  6. throws ServletException,Java.io.IOException  
  7. {  
  8. resp.setContentType("text/html; charset=GB2312");  
  9. Java.io.PrintWriter out=resp.getWriter();  
  10. out.println("");  
  11. out.println("#中文#");  
  12. out.println("");  
  13. }  

該文件也是用UltraEdit for Windows編寫的,其中的“中文”兩個字保存為字節(jié)流“D6 D0 CE C4”(GB2312編碼)。

開始編譯。Class文件中“中文”兩字的十六進(jìn)制碼。在編譯過程中,不起任何作用。只對Class文件的輸出產(chǎn)生影響,可以說和一起,達(dá)到與JSP文件中的相同的效果,因為對編譯過程和Class文件的輸出都會產(chǎn)生影響。

從Servlet源文件到Class的轉(zhuǎn)變過程

從Servlet源文件到Class的轉(zhuǎn)變過程

注意:普通Java程序的編譯過程與Servlet完全一樣。
截止現(xiàn)在,從JSP或Servlet源文件到Class文件的過程中中文內(nèi)容的蛻變歷程是不是昭然若揭了?OK,接下來看看Class文件中的中文又是怎樣被輸出的呢?

Class:輸出字符串

Class文件是Java程序的一種存儲載體。當(dāng)Class文件被虛擬機(jī)執(zhí)行時,通過readUTF把Class文件中的內(nèi)容讀入內(nèi)存中。字符串在內(nèi)存中表示為Unicode編碼。當(dāng)要把內(nèi)存中的內(nèi)容輸出到別的程序或是外圍設(shè)備(如終端)上去時,問題就來了(為了簡單起見,把“別的程序或外圍設(shè)備”稱之為“輸出對象”)。

1.如果輸出對象能處理Unicode字符,則一切都很簡單,只要把Unicode字符直接傳給輸出對象即可。

2.事實是,大多數(shù)輸出對象不能直接處理Unicode,它們只能處理ISO8859-1和GB2312等。在往輸出對象輸出字符串時,需要做一定的轉(zhuǎn)換才行。

看看下面的例子,給定一個有四個字符的Unicode字符串“00D6 00D0 00CE 00C4”,如果輸出到只能識別“ISO8859-1”的程序中去,則直接去掉前面的“00”即可得到目的字符串“D6 D0 CE C4”。假如把它們輸出到GB2312的程序中去,得到的結(jié)果很可能是一大堆亂碼。因為在GB2312中可能沒有(也有可能有)字符與00D6等字符對應(yīng)(如果對應(yīng)不上,將得到0x3f,也就是問號,如果對應(yīng)上了,由于00D6等字符太靠前,估計也是一些特殊符號,真正的漢字在Unicode中的編碼從 4E00開始)。

同樣的Unicode字符,輸出到不同編碼的對象中去時,結(jié)果是不同的。當(dāng)然,這其中有一種是我們期望的結(jié)果。對于能處理中文的輸出對象而言,自然希望輸入的內(nèi)容(也就是Java程序輸出的內(nèi)容)是基于GB2312編碼有意義的中文字符串。

以上Servlet源文件的例子而論,“D6 D0 CE C4”應(yīng)該是我們所想要的。當(dāng)把“D6 D0 CE C4”輸出到IE中時,用“簡體中文”方式查看,就能看到清楚的“中文”兩個字了。

【編輯推薦】

  1. 淺析Servlet的Web應(yīng)用程序
  2. 安裝Servlets和JSP
  3. Servlets和JSP的運行環(huán)境-JRun
  4. 入門學(xué)習(xí)Servlets引擎
  5. 淺談Java Servlets與CGI程序
責(zé)任編輯:佚名 來源: 中國IT實驗室
相關(guān)推薦

2009-07-08 11:01:40

Servlet源文件

2009-07-06 16:18:51

Servlet下載文件

2013-06-17 17:02:15

Windows PhoWP開發(fā)資源文件

2009-07-06 17:11:38

Servlet文件上傳

2011-08-15 14:47:28

Cocoa嵌入資源文件

2010-02-02 18:02:20

Python源文件

2012-02-03 09:55:06

Delphi

2010-02-03 15:17:58

Python 源文件

2009-08-21 16:13:27

C#讀取資源文件

2011-06-20 14:18:27

Qt 資源 文件

2011-07-14 22:36:37

C++

2009-06-19 16:12:22

Java語言properties

2011-01-05 15:15:01

數(shù)據(jù)庫

2009-06-02 14:21:04

eclipse資源文件eclipse中文

2009-08-28 16:08:28

C#利用資源文件

2013-07-30 12:30:57

Windows PhoWindows Pho

2009-07-08 09:35:53

Java ServleServlet 3.0

2009-07-15 17:33:11

Jython代碼

2009-12-28 11:23:38

WPF資源文件

2020-08-25 07:16:20

Python資源文件文件
點贊
收藏

51CTO技術(shù)棧公眾號