轉載地址:http://blog.csdn.net/feng_sundy/archive/2005/11/15/529944.aspx

          世界上的各地區都有本地的語言。地區差異直接導致了語言環境的差異。在開發一個國際化程序的過程中,處理語言問題就顯得很重要了。

            這是一個世界范圍內都存在的問題,所以,Java提供了世界性的解決方法。本文描述的方法是用于處理中文的,但是,推而廣之,對于處理世界上其它國家和地區的語言同樣適用。

            漢字是雙字節的。所謂雙字節是指一個雙字要占用兩個BYTE的位置(即16位),分別稱為高位和低位。中國規定的漢字編碼為GB2312,這是強制性的,目前幾乎所有的能處理中文的應用程序都支持GB2312。GB2312包括了一二級漢字和9區符號,高位從0xa1到0xfe,低位也是從0xa1到0xfe,其中,漢字的編碼范圍為0xb0a1到0xf7fe。

            另外有一種編碼,叫做GBK,但這是一份規范,不是強制的。GBK提供了20902個漢字,它兼容GB2312,編碼范圍為0x8140到0xfefe。GBK中的所有字符都可以一一映射到Unicode 2.0。

            在不久的將來,中國會頒布另一種標準:GB18030-2000(GBK2K)。它收錄了藏、蒙等少數民族的字型,從根本上解決了字位不足的問題。注意:它不再是定長的。其二字節部份與GBK兼容,四字節部分是擴充的字符、字形。它的首字節和第三字節從0x81到0xfe,二字節和第四字節從0x30到0x39。

            本文不打算介紹Unicode,有興趣的可以瀏覽“http://www.unicode.org/”查看更多的信息。Unicode有一個特性:它包括了世界上所有的字符字形。所以,各個地區的語言都可以建立與Unicode的映射關系,而Java正是利用了這一點以達到異種語言之間的轉換。

            在JDK中,與中文相關的編碼有:

            表1 JDK中與中文相關的編碼列表

          編碼名稱 說明
          ASCII 7位,與ascii7相同
          ISO8859-1 8-位,與 8859_1,ISO-8859-1,ISO_8859-1,latin1...等相同
          GB2312-80 16位,與gb2312,gb2312-1980,EUC_CN,euccn,1381,Cp1381, 1383, Cp1383, ISO2022CN,ISO2022CN_GB...等相同
          GBK 與MS936相同,注意:區分大小寫
          UTF8 與UTF-8相同
          GB18030 與cp1392、1392相同,目前支持的JDK很少

            在實際編程時,接觸得比較多的是GB2312(GBK)和ISO8859-1。

            為什么會有“?”號

            上文說過,異種語言之間的轉換是通過Unicode來完成的。假設有兩種不同的語言A和B,轉換的步驟為:先把A轉化為Unicode,再把Unicode轉化為B。

            舉例說明。有GB2312中有一個漢字“李”,其編碼為“C0EE”,欲轉化為ISO8859-1編碼。步驟為:先把“李”字轉化為Unicode,得到“674E”,再把“674E”轉化為ISO8859-1字符。當然,這個映射不會成功,因為ISO8859-1中根本就沒有與“674E”對應的字符。

            當映射不成功時,問題就發生了!當從某語言向Unicode轉化時,如果在某語言中沒有該字符,得到的將是Unicode的代碼“\uffffd”(“\u”表示是Unicode編碼,)。而從Unicode向某語言轉化時,如果某語言沒有對應的字符,則得到的是“0x3f”(“?”)。這就是“?”的由來。

            例如:把字符流buf =“0x80 0x40 0xb0 0xa1”進行new String(buf, "gb2312")操作,得到的結果是“\ufffd\u554a”,再println出來,得到的結果將是“?啊”,因為“0x80 0x40”是GBK中的字符,在GB2312中沒有。

            再如,把字符串String="\u00d6\u00ec\u00e9\u0046\u00bb\u00f9"進行new String (buf.getBytes("GBK"))操作,得到的結果是“3fa8aca8a6463fa8b4”,其中,“\u00d6”在“GBK”中沒有對應的字符,得到“3f”,“\u00ec”對應著“a8ac”,“\u00e9”對應著“a8a6”,“0046”對應著“46”(因為這是ASCII字符),“\u00bb”沒找到,得到“3f”,最后,“\u00f9”對應著“a8b4”。把這個字符串println一下,得到的結果是“?ìéF?ù”。看到沒?這里并不全是問號,因為GBK與Unicode映射的內容中除了漢字外還有字符,本例就是最好的明證。

            所以,在漢字轉碼時,如果發生錯亂,得到的不一定都是問號噢!不過,錯了終究是錯了,50步和100步并沒有質的差別。

            或者會問:如果源字符集中有,而Unicode中沒有,結果會如何?回答是不知道。因為我手頭沒有能做這個測試的源字符集。但有一點是肯定的,那就是源字符集不夠規范。在Java中,如果發生這種情況,是會拋出異常的。


          wwww.chin aitpower.comA8GS7iZj14UFuEmHNTTIELclR
            什么是UTF

            UTF,是Unicode Text Format的縮寫,意為Unicode文本格式。對于UTF,是這樣定義的:

            (1)如果Unicode的16位字符的頭9位是0,則用一個字節表示,這個字節的首位是“0”,剩下的7位與原字符中的后7位相同,如“\u0034”(0000 0000 0011 0100),用“34” (0011 0100)表示;(與源Unicode字符是相同的);

            (2)如果Unicode的16位字符的頭5位是0,則用2個字節表示,首字節是“110”開頭,后面的5位與源字符中除去頭5個零后的最高5位相同;第二個字節以“10”開頭,后面的6位與源字符中的低6位相同。如“\u025d”(0000 0010 0101 1101),轉化后為“c99d”(1100 1001 1001 1101);

            (3)如果不符合上述兩個規則,則用三個字節表示。第一個字節以“1110”開頭,后四位為源字符的高四位;第二個字節以“10”開頭,后六位為源字符中間的六位;第三個字節以“10”開頭,后六位為源字符的低六位;如“\u9da7”(1001 1101 1010 0111),轉化為“e9b6a7”(1110 1001 1011 0110 1010 0111);

            可以這么描述JAVA程序中Unicode與UTF的關系,雖然不絕對:字符串在內存中運行時,表現為Unicode代碼,而當要保存到文件或其它介質中去時,用的是UTF。這個轉化過程是由writeUTF和readUTF來完成的。

            好了,基礎性的論述差不多了,下面進入正題。

            先把這個問題想成是一個黑匣子。先看黑匣子的一級表示:

          input(charsetA)->process(Unicode)->output(charsetB)

            簡單,這就是一個IPO模型,即輸入、處理和輸出。同樣的內容要經過“從charsetA到unicode再到charsetB”的轉化。

            再看二級表示:

          SourceFile(jsp,java)->class->output

            在這個圖中,可以看出,輸入的是jsp和java源文件,在處理過程中,以Class文件為載體,然后輸出。再細化到三級表示:

          jsp->temp file->class->browser,os console,db

          app,servlet->class->browser,os console,db

            這個圖就更明白了。Jsp文件先生成中間的Java文件,再生成Class。而Servlet和普通App則直接編譯生成Class。然后,從Class再輸出到瀏覽器、控制臺或數據庫等。

            JSP:從源文件到Class的過程

            Jsp的源文件是以“.jsp”結尾的文本文件。在本節中,將闡述JSP文件的解釋和編譯過程,并跟蹤其中的中文變化。

            1、JSP/Servlet引擎提供的JSP轉換工具(jspc)搜索JSP文件中用<%@ page contentType ="text/html; charset=<Jsp-charset>"%>中指定的charset。如果在JSP文件中未指定<Jsp-charset>,則取JVM中的默認設置file.encoding,一般情況下,這個值是ISO8859-1;

            2、jspc用相當于“javac –encoding <Jsp-charset>”的命令解釋JSP文件中出現的所有字符,包括中文字符和ASCII字符,然后把這些字符轉換成Unicode字符,再轉化成UTF格式,存為JAVA文件。ASCII碼字符轉化為Unicode字符時只是簡單地在前面加“00”,如“A”,轉化為“\u0041”(不需要理由,Unicode的碼表就是這么編的)。然后,經過到UTF的轉換,又變回“41”了!這也就是可以使用普通文本編輯器查看由JSP生成的JAVA文件的原因;

            3、引擎用相當于“javac –encoding UNICODE”的命令,把JAVA文件編譯成CLASS文件;

            先看一下這些過程中中文字符的轉換情況。有如下源代碼:

          <%@ page contentType="text/html; charset=gb2312"%>
          <html><body>
          <%
           String a="中文";
           out.println(a);
          %>
          </body></html>

            這段代碼是在UltraEdit for Windows上編寫的。保存后,“中文”兩個字的16進制編碼為“D6 D0 CE C4”(GB2312編碼)。經查表,“中文”兩字的Unicode編碼為“\u4E2D\u6587”,用 UTF表示就是“E4 B8 AD E6 96 87”。打開引擎生成的由JSP文件轉變而成的JAVA文件,發現其中的“中文”兩個字確實被“E4 B8 AD E6 96 87”替代了,再查看由JAVA文件編譯生成的CLASS文件,發現結果與JAVA文件中的完全一樣。

            再看JSP中指定的CharSet為ISO-8859-1的情況。

          <%@ page contentType="text/html; charset=ISO-8859-1"%>
          <html><body>
          <%
           String a="中文";
           out.println(a);
          %>
          </body></html>

            同樣,該文件是用UltraEdit編寫的,“中文”這兩個字也是存為GB2312編碼“D6 D0 CE C4”。先模擬一下生成的JAVA文件和CLASS文件的過程:jspc用ISO-8859-1來解釋“中文”,并把它映射到Unicode。由于ISO-8859-1是8位的,且是拉丁語系,其映射規則就是在每個字節前加“00”,所以,映射后的Unicode編碼應為“\u00D6\u00D0\u00CE\u00C4”,轉化成UTF后應該是“C3 96 C3 90 C3 8E C3 84”。好,打開文件看一下,JAVA文件和CLASS文件中,“中文”果然都表示為“C3 96 C3 90 C3 8E C3 84”。

            如果上述代碼中不指定<Jsp-charset>,即把第一行寫成“<%@ page contentType="text/html" %>”,JSPC會使用file.encoding的設置來解釋JSP文件。在RedHat 6.2上,其處理結果與指定為ISO-8859-1是完全相同的。

            到現在為止,已經解釋了從JSP文件到CLASS文件的轉變過程中中文字符的映射過程。一句話:從“JspCharSet到Unicode再到UTF”。下表總結了這個過程:

            表2 “中文”從JSP到CLASS的轉化過程

          Jsp-CharSet JSP文件中 JAVA文件中 CLASS文件中
          GB2312 D6 D0 CE C4(GB2312) 從\u4E2D\u6587(Unicode)到E4 B8 AD E6 96 87 (UTF) E4 B8 AD E6 96 87 (UTF)
          ISO-8859-1 D6 D0 CE C4
          (GB2312) 從\u00D6\u00D0\u00CE\u00C4 (Unicode)到C3 96 C3 90 C3 8E C3 84 (UTF) C3 96 C3 90 C3 8E C3 84 (UTF)
          無(默認=file.encoding) 同ISO-8859-1 同ISO-8859-1 同ISO-8859-1

            下節先討論Servlet從JAVA文件到CLASS文件的轉化過程,然后再解釋從CLASS文件如何輸出到客戶端。之所以這樣安排,是因為JSP和Servlet在輸出時處理方法是一樣的。


            Servlet:從源文件到Class的過程

            Servlet源文件是以“.java”結尾的文本文件。本節將討論Servlet的編譯過程并跟蹤其中的中文變化。

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

            源文件在編譯時,用<Compile-charset>來解釋所有字符,包括中文字符和ASCII字符。然后把字符常量轉變成Unicode字符,最后,把Unicode轉變成UTF。

            在Servlet中,還有一個地方設置輸出流的CharSet。通常在輸出結果前,調用HttpServletResponse的setContentType方法來達到與在JSP中設置<Jsp-charset>一樣的效果,稱之為<Servlet-charset>。

            注意,文中一共提到了三個變量:<Jsp-charset>、<Compile-charset>和<Servlet-charset>。其中,JSP文件只與<Jsp-charset>有關,而<Compile-charset>和<Servlet-charset>只與Servlet有關。

            看下例:

          import javax.servlet.*;

          import javax.servlet.http.*;

          class testServlet extends HttpServlet
          {
           public void doGet(HttpServletRequest req,HttpServletResponse resp)
           throws ServletException,java.io.IOException
           {
            resp.setContentType("text/html; charset=GB2312");
            java.io.PrintWriter out=resp.getWriter();
            out.println("<html>");
            out.println("#中文#");
            out.println("</html>");
           }
          }

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

            開始編譯。下表是<Compile-charset>不同時,CLASS文件中“中文”兩字的十六進制碼。在編譯過程中,<Servlet-charset>不起任何作用。<Servlet-charset>只對CLASS文件的輸出產生影響,實際上是<Servlet-charset>和<Compile-charset>一起,達到與JSP文件中的<Jsp-charset>相同的效果,因為<Jsp-charset>對編譯和CLASS文件的輸出都會產生影響。

            表3 “中文”從Servlet源文件到Class的轉變過程

          Compile-charset Servlet源文件中 Class文件中 等效的Unicode碼
          GB2312 D6 D0 CE C4
          (GB2312) E4 B8 AD E6 96 87 (UTF) \u4E2D\u6587 (在Unicode中=“中文”)
          ISO-8859-1 D6 D0 CE C4
          (GB2312) C3 96 C3 90 C3 8E C3 84 (UTF) \u00D6 \u00D0 \u00CE \u00C4 (在D6 D0 CE C4前面各加了一個00)
          無(默認) D6 D0 CE C4 (GB2312) 同ISO-8859-1 同ISO-8859-1

            普通Java程序的編譯過程與Servlet完全一樣。

            CLASS文件中的中文表示法是不是昭然若揭了?OK,接下來看看CLASS又是怎樣輸出中文的呢?

            Class:輸出字符串

            上文說過,字符串在內存中表現為Unicode編碼。至于這種Unicode編碼表示了什么,那要看它是從哪種字符集映射過來的,也就是說要看它的祖先。這好比在托運行李時,外觀都是紙箱子,里面裝了什么就要看寄郵件的人實際郵了什么東西。

            看看上面的例子,如果給一串Unicode編碼“00D6 00D0 00CE 00C4”,如果不作轉換,直接用Unicode碼表來對照它時,是四個字符(而且是特殊字符);假如把它與“ISO8859-1”進行映射,則直接去掉前面的“00”即可得到“D6 D0 CE C4”,這是ASCII碼表中的四個字符;而假如把它當作GB2312來進行映射,得到的結果很可能是一大堆亂碼,因為在GB2312中有可能沒有(也有可能有)字符與00D6等字符對應(如果對應不上,將得到0x3f,也就是問號,如果對應上了,由于00D6等字符太靠前,估計也是一些特殊符號,真正的漢字在Unicode中的編碼從4E00開始)。

            各位看到了,同樣的Unicode字符,可以解釋成不同的樣子。當然,這其中有一種是我們期望的結果。以上例而論,“D6 D0 CE C4”應該是我們所想要的,當把“D6 D0 CE C4”輸出到IE中時,用“簡體中文”方式查看,就能看到清楚的“中文”兩個字了。(當然了,如果你一定要用“西歐字符”來看,那也沒辦法,你將得不到任何有何時何地的東西)為什么呢?因為“00D6 00D0 00CE 00C4”本來就是由ISO8859-1轉化過去的。


            給出如下結論:

            在Class輸出字符串前,會將Unicode的字符串按照某一種內碼重新生成字節流,然后把字節流輸入,相當于進行了一步“String.getBytes(???)”操作。???代表某一種字符集。

            如果是Servlet,那么,這種內碼就是在HttpServletResponse.setContentType()方法中指定的內碼,也就是上文定義的<Servlet-charset>。

            如果是JSP,那么,這種內碼就是在<%@ page contentType=""%>中指定的內碼,也就是上文定義的<Jsp-charset>。

            如果是Java程序,那么,這種內碼就是file.encoding中指定的內碼,默認為ISO8859-1。

            當輸出對象是瀏覽器時

            以流行的瀏覽器IE為例。IE支持多種內碼。假如IE接收到了一個字節流“D6 D0 CE C4”,你可以嘗試用各種內碼去查看。你會發現用“簡體中文”時能得到正確的結果。因為“D6 D0 CE C4”本來就是簡體中文中“中文”兩個字的編碼。

            OK,完整地看一遍。

            JSP:源文件為GB2312格式的文本文件,且JSP源文件中有“中文”這兩個漢字

            如果指定了<Jsp-charset>為GB2312,轉化過程如下表。

            表4 Jsp-charset = GB2312時的變化過程

          序號 步驟說明 結果
          1 編寫JSP源文件,且存為GB2312格式 D6 D0 CE C4
          (D6D0=中 CEC4=文)
          2 jspc把JSP源文件轉化為臨時JAVA文件,并把字符串按照GB2312映射到Unicode,并用UTF格式寫入JAVA文件中 E4 B8 AD E6 96 87
          3 把臨時JAVA文件編譯成CLASS文件 E4 B8 AD E6 96 87
          4 運行時,先從CLASS文件中用readUTF讀出字符串,在內存中的是Unicode編碼 4E 2D 65 87(在Unicode中4E2D=中 6587=文)
          5 根據Jsp-charset=GB2312把Unicode轉化為字節流 D6 D0 CE C4
          6 把字節流輸出到IE中,并設置IE的編碼為GB2312(作者按:這個信息隱藏在HTTP頭中) D6 D0 CE C4
          7 IE用“簡體中文”查看結果 “中文”(正確顯示)

            如果指定了<Jsp-charset>為ISO8859-1,轉化過程如下表。

            表5 Jsp-charset = ISO8859-1時的變化過程

          序號 步驟說明 結果
          1 編寫JSP源文件,且存為GB2312格式 D6 D0 CE C4
          (D6D0=中 CEC4=文)
          2 jspc把JSP源文件轉化為臨時JAVA文件,并把字符串按照ISO8859-1映射到Unicode,并用UTF格式寫入JAVA文件中 C3 96 C3 90 C3 8E C3 84
          3 把臨時JAVA文件編譯成CLASS文件 C3 96 C3 90 C3 8E C3 84
          4 運行時,先從CLASS文件中用readUTF讀出字符串,在內存中的是Unicode編碼 00 D6 00 D0 00 CE 00 C4
          (啥都不是!!!)
          5 根據Jsp-charset=ISO8859-1把Unicode轉化為字節流 D6 D0 CE C4
          6 把字節流輸出到IE中,并設置IE的編碼為ISO8859-1(作者按:這個信息隱藏在HTTP頭中) D6 D0 CE C4
          7 IE用“西歐字符”查看結果 亂碼,其實是四個ASCII字符,但由于大于128,所以顯示出來的怪模怪樣
          8 改變IE的頁面編碼為“簡體中文” “中文”(正確顯示)

            奇怪了!為什么把<Jsp-charset>設成GB2312和ISO8859-1是一個樣的,都能正確顯示?因為表4表5中的第2步和第5步互逆,是相互“抵消”的。只不過當指定為ISO8859-1時,要增加第8步操作,殊為不便。

            再看看不指定<Jsp-charset> 時的情況。

            表6 未指定Jsp-charset 時的變化過程

          序號 步驟說明 結果
          1 編寫JSP源文件,且存為GB2312格式 D6 D0 CE C4
          (D6D0=中 CEC4=文)
          2 jspc把JSP源文件轉化為臨時JAVA文件,并把字符串按照ISO8859-1映射到Unicode,并用UTF格式寫入JAVA文件中 C3 96 C3 90 C3 8E C3 84
          3 把臨時JAVA文件編譯成CLASS文件 C3 96 C3 90 C3 8E C3 84
          4 運行時,先從CLASS文件中用readUTF讀出字符串,在內存中的是Unicode編碼 00 D6 00 D0 00 CE 00 C4
          5 根據Jsp-charset=ISO8859-1把Unicode轉化為字節流 D6 D0 CE C4
          6 把字節流輸出到IE中 D6 D0 CE C4
          7 IE用發出請求時的頁面的編碼查看結果 視情況而定。如果是簡體中文,則能正確顯示,否則,需執行表5中的第8步

            Servlet:源文件為JAVA文件,格式是GB2312,源文件中含有“中文”這兩個漢字

            如果<Compile-charset>=GB2312,<Servlet-charset>=GB2312

            表7 Compile-charset=Servlet-charset=GB2312 時的變化過程

          序號 步驟說明 結果
          1 編寫Servlet源文件,且存為GB2312格式 D6 D0 CE C4
          (D6D0=中 CEC4=文)
          2 用javac –encoding GB2312把JAVA源文件編譯成CLASS文件 E4 B8 AD E6 96 87 (UTF)
          3 運行時,先從CLASS文件中用readUTF讀出字符串,在內存中的是Unicode編碼 4E 2D 65 87 (Unicode)
          4 根據Servlet-charset=GB2312把Unicode轉化為字節流 D6 D0 CE C4 (GB2312)
          5 把字節流輸出到IE中并設置IE的編碼屬性為Servlet-charset=GB2312 D6 D0 CE C4 (GB2312)
          6 IE用“簡體中文”查看結果 “中文”(正確顯示)

            如果<Compile-charset>=ISO8859-1,<Servlet-charset>=ISO8859-1

            表8 Compile-charset=Servlet-charset=ISO8859-1時的變化過程

          序號 步驟說明 結果
          1 編寫Servlet源文件,且存為GB2312格式 D6 D0 CE C4
          (D6D0=中 CEC4=文)
          2 用javac –encoding ISO8859-1把JAVA源文件編譯成CLASS文件 C3 96 C3 90 C3 8E C3 84 (UTF)
          3 運行時,先從CLASS文件中用readUTF讀出字符串,在內存中的是Unicode編碼 00 D6 00 D0 00 CE 00 C4
          4 根據Servlet-charset=ISO8859-1把Unicode轉化為字節流 D6 D0 CE C4
          5 把字節流輸出到IE中并設置IE的編碼屬性為Servlet-charset=ISO8859-1 D6 D0 CE C4 (GB2312)
          6 IE用“西歐字符”查看結果 亂碼(原因同表5)
          7 改變IE的頁面編碼為“簡體中文” “中文”(正確顯示)

            如果不指定Compile-charset或Servlet-charset,其默認值均為ISO8859-1。

            當Compile-charset=Servlet-charset時,第2步和第4步能互逆,“抵消”,顯示結果均能正確。讀者可試著寫一下Compile-charset<>Servlet-charset時的情況,肯定是不正確的。

            當輸出對象是數據庫時

            輸出到數據庫時,原理與輸出到瀏覽器也是一樣的。本節只是Servlet為例,JSP的情況請讀者自行推導。

            假設有一個Servlet,它能接收來自客戶端(IE,簡體中文)的漢字字符串,然后把它寫入到內碼為ISO8859-1的數據庫中,然后再從數據庫中取出這個字符串,顯示到客戶端。

            表9 輸出對象是數據庫時的變化過程(1)

          序號 步驟說明 結果 域
          1 在IE中輸入“中文” D6 D0 CE C4 IE
          2 IE把字符串轉變成UTF,并送入傳輸流中 E4 B8 AD E6 96 87
          3 Servlet接收到輸入流,用readUTF讀取 4E 2D 65 87(unicode) Servlet
          4 編程者在Servlet中必須把字符串根據GB2312還原為字節流 D6 D0 CE C4
          5 編程者根據數據庫內碼ISO8859-1生成新的字符串 00 D6 00 D0 00 CE 00 C4
          6 把新生成的字符串提交給JDBC 00 D6 00 D0 00 CE 00 C4
          7 JDBC檢測到數據庫內碼為ISO8859-1 00 D6 00 D0 00 CE 00 C4 JDBC
          8 JDBC把接收到的字符串按照ISO8859-1生成字節流 D6 D0 CE C4
          9 JDBC把字節流寫入數據庫中 D6 D0 CE C4
          10 完成數據存儲工作 D6 D0 CE C4 數據庫
          以下是從數據庫中取出數的過程
          11 JDBC從數據庫中取出字節流 D6 D0 CE C4 JDBC
          12 JDBC按照數據庫的字符集ISO8859-1生成字符串,并提交給Servlet 00 D6 00 D0 00 CE 00 C4 (Unicode)  
          13 Servlet獲得字符串 00 D6 00 D0 00 CE 00 C4 (Unicode) Servlet
          14 編程者必須根據數據庫的內碼ISO8859-1還原成原始字節流 D6 D0 CE C4  
          15 編程者必須根據客戶端字符集GB2312生成新的字符串 4E 2D 65 87
          (Unicode)  
          Servlet準備把字符串輸出到客戶端
          16 Servlet根據<Servlet-charset>生成字節流 D6D0 CE C4 Servlet
          17 Servlet把字節流輸出到IE中,如果已指定<Servlet-charset>,還會設置IE的編碼為<Servlet-charset> D6 D0 CE C4
          18 IE根據指定的編碼或默認編碼查看結果 “中文”(正確顯示) IE

            解釋一下,表中第4第5步和第15第16步是用紅色標記的,表示要由編碼者來作轉換。第4、5兩步其實就是一句話:“new String(source.getBytes("GB2312"), "ISO8859-1")”。第15、16兩步也是一句話:“new String(source.getBytes("ISO8859-1"), "GB2312")”。親愛的讀者,你在這樣編寫代碼時是否意識到了其中的每一個細節呢?

            至于客戶端內碼和數據庫內碼為其它值時的流程,和輸出對象是系統控制臺時的流程,請讀者自己想吧。明白了上述流程的原理,相信你可以輕松地寫出來。

            行文至此,已可告一段落了。終點又回到了起點,對于編程者而言,幾乎是什么影響都沒有。

            因為我們早就被告之要這么做了。

            以下給出一個結論,作為結尾。

            1、 在Jsp文件中,要指定contentType,其中,charset的值要與客戶端瀏覽器所用的字符集一樣;對于其中的字符串常量,不需做任何內碼轉換;對于字符串變量,要求能根據ContentType中指定的字符集還原成客戶端能識別的字節流,簡單地說,就是“字符串變量是基于<Jsp-charset>字符集的”;

            2、 在Servlet中,必須用HttpServletResponse.setContentType()設置charset,且設置成與客戶端內碼一致;對于其中的字符串常量,需要在Javac編譯時指定encoding,這個encoding必須與編寫源文件的平臺的字符集一樣,一般說來都是GB2312或GBK;對于字符串變量,與JSP一樣,必須“是基于<Servlet-charset>字符集的”。

          posted @ 2008-07-23 14:02 小馬歌 閱讀(207) | 評論 (0)編輯 收藏
           
          實際運用 Tomcat 5.0.19,我們了解在不修改 Tomcat 原始碼的狀況下,使用者透過 Form submit 的資料將一律以 ISO8859-1 處理,程式設計師必須自行將字串將轉換為 Big5(繁體中文) or GB2312/GBK(簡體中文),我們在應用程式中,對所有的 request.getParameter("xx"); 作了 toBig5String() 的處理,理論上,所有的中文問題應該不會出現才對,結果,還是發現某些狀況下,中文還是變成亂碼!

          經過分析整理,我們發現問題出在 QueryString 的解析,以前在 Tomcat 4.x 時代,無論 SUBMIT 時採用 GET or POST,Tomcat server 對 parameters 的處理都採用相同的編碼,但在 Tomcat 5.x 版,不知何故,卻將 QueryString 的解析獨立出來,目前確認,Form 的 Method 採用 GET 及直接將參數寫在 URL 上的中文,上傳到 Tomcat 時,無論如何轉碼,都會變成亂碼,那怕你事先作過 URLEncode 也一樣。

          網站上,有人針對這個問題,建議將所有中文改採用 base64 編碼,到了 server 上,程式將自行土 base64 decode 回來,確保中文不會發生問題。這樣作法當然可以解決這個問題,但是所有網頁變成限定要採用 POST,且程式設計師要隨時分清楚,那個參數是採用 GET 上傳,那個參數是採用 POST 上傳,然後再針對不同的方式採用不同的解析,這樣的程式一點兒移植性都沒有,更別提跨平臺、跨國際語言了。

          研究 Tomcat 的文件及原始碼,我們找到了問題所在及解決的方法,只有按著以下的作法,才能使 Form submit 的資料完全按著 ISO8859-1 的編碼,當然,若是全照著 Tomcat 的文件說明去作,肯定還是不行,你還是得加上這個參數到 server.xml 中才行。

          解決方案

          請先研究 $TOMCAT_HOME/webapps/tomcat-docs/config/http.html 這個說明檔,擷錄重點如下:
          URIEncoding:This specifies the character encoding used to decode the URI bytes, after %xx decoding the URL. If not specified, ISO-8859-1 will be used.

          useBodyEncodingForURI:This specifies if the encoding specified in contentType should be used for URI query parameters, instead of using the URIEncoding. This setting is present for compatibility with Tomcat 4.1.x, where the encoding specified in the contentType, or explicitely set using Request.setCharacterEncoding method was also used for the parameters from the URL. The default value is false.

          上述二個 Tomcat 參數,是設定在 server.xml 中的 http <Connector /> 區塊,要解決 QueryString 中文變成亂碼的問題,你必須至少設定這二個參數其中之一。
          URIEncoding 請設定為 URIEncoding="ISO-8859-1" 指定為 "ISO-8859-1" 編碼,讓 QueryString 的字元編碼與 post body 相同。
          useBodyEncodingForURI 這是用來相容 Tomcat 4.x 版的,設定的值是 "true" or "false",意思是指 "要不要讓 QueryString 與 POST BODY 採用相同的字元編碼 ?",若是設成 true,那也可達到 "ISO-8859-1" 編碼的需求。
          建議,採用 URIEncoding 的設定,畢竟 useBodyEncodingForURI 的作法是為了相容 Tomcat 4.X。不過若照原文的說明,理論上這二個參數都不設,Tomcat 也該採用 "ISO-8859-1" 的編碼,那為什麼還是會有問題呢 ? 我們由 Tomcat Source Code 來看就清楚了。
          // 這一段碼是 Tomcat 用來解 QueryString 的程式,
                      // 在 org.apache.tomcat.util.http.Parameters 這個 class 裡。
                      private String urlDecode(ByteChunk bc, String enc) throws IOException {
                      if( urlDec==null ) {
                      urlDec=new UDecoder();
                      }
                      urlDec.convert(bc);
                      String result = null;
                      if (enc != null) {
                      bc.setEncoding(enc);
                      result = bc.toString();
                      }
                      else {
                      CharChunk cc = tmpNameC;
                      cc.allocate(bc.getLength(), -1);
                      // Default encoding: fast conversion
                      byte[] bbuf = bc.getBuffer();
                      char[] cbuf = cc.getBuffer();
                      int start = bc.getStart();
                      for (int i = 0; i < bc.getLength(); i++) {
                      cbuf[i] = (char) (bbuf[i + start] & 0xff);
                      }
                      cc.setChars(cbuf, 0, bc.getLength());
                      result = cc.toString();
                      cc.recycle();
                      }
                      return result;
                      }

          請特別注意紅色區塊,當 Tomcat 發現 QueryString 並沒有設定 encode 時,並非像文件中所說預設採用 ISO-8859-1 的編碼,而是用一段 fast conversion 來處理,才會造成中文問題,所以,還是必須在 Server.xml 中,加上 URLEncoding 的參數設定才行哦。

          Connector 的設定範例:
          <Connector
                      debug="0"
                      acceptCount="100"
                      connectionTimeout="20000"
                      disableUploadTimeout="true"
                      port="80"
                      redirectPort="8443"
                      enableLookups="false"
                      minSpareThreads="25"
                      maxSpareThreads="75"
                      maxThreads="150"
                      maxPostSize="0"
                      URIEncoding="ISO-8859-1"
                      >
           </Connector>
          posted @ 2008-07-23 13:58 小馬歌 閱讀(351) | 評論 (0)編輯 收藏
           

          linux環境中安裝mysql需要

          mysql-standard-4.0.24-pc-linux-gnu-i686.tar.gz這個文件

          可以從http://dev.mysql.com/downloads/index.html下載

          mysql-standard-4.0.24-pc-linux-gnu-i686.tar.gz 是mysql4.0.24版本的安裝文件,是一個二進制的壓縮包,所以我們的安裝方式就為二進制分發安裝。

          安裝步驟:

          1.mysql-standard-4.0.24-pc-linux-gnu-i686.tar.gz 拷貝到一個目錄中

          2.shell>tar zvxfmysql-standard-4.0.24-pc-linux-gnu-i686.tar.gz

          3.上面的命令將在當前目錄下生成一個mysql-standard-4.0.24-pc-linux-gnu-i686文件夾

          4.shell>mv mysql-standard-4.0.24-pc-linux-gnu-i686 /usr/local/mysql

          5.上面的命令是將mysql-standard-4.0.24-pc-linux-gnu-i686下的所有東東,剪切到/usr/local/mysql 下,進行這一步是為了以后的方便。

          6.shell> groupadd mysql         增加一個名為mysql的用戶組

          7.shell> useradd -g mysql mysql 在mysql用戶組中加一個名為mysql的用戶

          如果上面的兩個命令不能執行,那么要切換到root用戶下執行

          shell>su root -

          8.shell>cd /usr/local/mysql

          9.shell> cp support-files/my-medium.cnf /etc/my.cnf 

          這時會問是否覆蓋重名文件,回答y

          10.shell> scripts/mysql_install_db --user=mysql

                     以mysql用戶初始化數據庫,必須以mysql用戶

          11.shell> chown -R root .

          注意后面有點,表示將當前目錄下的所有文件與子目錄的擁有者設

          定為root用戶

          12.shell> chown -R mysql data

          表示將當前目錄下的data目錄的擁有者設定為mysql用戶

          13.shell> chgrp -R mysql .

          注意后面有點,表示將當前目錄下的文件的文件組設為mysql組

          14.shell> bin/mysqld_safe --user=root & 

          此時如果沒有出現“……ended”字樣,大功告成!

          15.回車顯示shell>

           

          此時你可以

          l        通過shell>netstat –atln命令查看3306端口是否已經啟用

          l        也可以shell>ps -ef | grep mysqld 查看當前系統中的mysqld的進程

          l        或直接 shell>bin/mysql –u root 進入mysql客戶端,進行mysql操作

          l        shell>bin/mysqladmin shutdown 停止mysql服務

           

          記住:此時你的root用戶是沒有密碼的,任何身份都可以用root進入,你可以

          通過shell> bin/mysqladmin -u root password '新口令'來設定root用戶的口令,此口令將在進入mysql客戶端和停止mysql服務時需要輸入

           

          提示:在啟單個服務的時候,可以通過修改/etc/my.cnf文件來配置

          可以用VI編輯器打開my.cnf ,怎么打開呢,看下面,^_^

          shell>vi my.cnf 打開my.cnf

          找到下面這段

          [mysqld] 

          port = 8888 

          socket = /tmp/mysql.sock 

          可以在后面加上相應的配置

          log = /var/log/mysql.log 

          datadir = /free/mysqldbf 

          log = /* 改變log的保存位置

          datadir = /free/mysqldbf 改變data的保存位置


          更全的安裝文檔 :http://21nw.com/wk/linux%E4%B8%8B%E5%AE%89%E8%A3%85MySQL%E7%9A%84%E5%A4%A7%E5%85%A8
          posted @ 2008-07-22 14:21 小馬歌 閱讀(112) | 評論 (0)編輯 收藏
           
          錯誤現象:
           java.lang.NoSuchMethodError: javax.xml.transform.dom.DOMResult.getNextSibling()Lorg/w3c/dom/Node;org.apache.xalan.transformer.TransformerIdentityImpl.createResultContentHandler(TransformerIdentityImpl.java:199)

          問題分析:
          問題出在Tomcat和jdk的兼容性上,如果用jdk1.5那么必須使用5.5.x系列的版本,反之亦然,如果和5.0.x系列的Tomcat搭配就會出現兼容問題導致報錯。原來是因為使用了tomcat5.0它里面的xml-api.jar把jdk1.5里面的DOMResult沖掉了 ,tomcat5.5.17則不會有這個問題。

          解決方案:
          最后環境換成jdk1.5.06,tomcat換成5.5.17,問題解決
          或者  把xalan解壓包下的xml-apis.jar和xercesImpl.jar替換掉tomcat\commom/endorsed下的老版本的jar即可.
          posted @ 2008-07-21 14:07 小馬歌 閱讀(669) | 評論 (0)編輯 收藏
           
          1,apache-穩定,用戶群體大,模塊可選,邏輯處理。

          Apache是世界使用排名第一的Web服務器軟件。它可以運行在幾乎所有廣泛使用的計算機平臺上。
          Apache源于NCSAhttpd服務器,經過多次修改,成為世界上最流行的Web服務器軟件之一。Apache取自“a patchy server”的讀音,意思是充滿補丁的服務器,因為它是自由軟件,所以不斷有人來為它開發新的功能、新的特性、修改原來的缺陷。Apache的特點是簡單、速度快、性能穩定,并可做代理服務器來使用。

          本來它只用于小型或試驗Internet網絡,后來逐步擴充到各種Unix系統中,尤其對Linux的支持相當完美。Apache有多種產品,可以支持SSL技術,支持多個虛擬主機。Apache是以進程為基礎的結構,進程要比線程消耗更多的系統開支,不太適合于多處理器環境,因此,在一個Apache Web站點擴容時,通常是增加服務器或擴充群集節點而不是增加處理器。到目前為止Apache仍然是世界上用的最多的Web服務器,市場占有率達60%左右。世界上很多著名的網站如Amazon.com、Yahoo!、W3 Consortium、Financial Times等都是Apache的產物,它的成功之處主要在于它的源代碼開放、有一支開放的開發隊伍、支持跨平臺的應用(可以運行在幾乎所有的Unix、Windows、Linux系統平臺上)以及它的可移植性等方面。

          Apache的誕生極富有戲劇性。當NCSA WWW服務器項目停頓后,那些使用NCSA WWW服務器的人們開始交換他們用于該服務器的補丁程序,他們也很快認識到成立管理這些補丁程序的論壇是必要的。就這樣,誕生了Apache Group,后來這個團體在NCSA的基礎上創建了Apache。

          Apache web服務器軟件擁有以下特性:

          支持最新的HTTP/1.1通信協議

          擁有簡單而強有力的基于文件的配置過程

          支持通用網關接口

          支持基于IP和基于域名的虛擬主機

          支持多種方式的HTTP認證

          集成Perl處理模塊

          集成代理服務器模塊

          支持實時監視服務器狀態和定制服務器日志

          支持服務器端包含指令(SSI)

          支持安全Socket層(SSL)

          提供用戶會話過程的跟蹤

          支持FastCGI

          通過第三方模塊可以支持Java Servlets

          如果你準備選擇Web服務器,毫無疑問Apache是你的最佳選擇。

          http://www.apache.org/是它的官方網站.

          2,Lighttpd是一個德國人領導的開源軟件,其根本的目的是提供一個專門針對高性能網站,安全、快速、兼容性好并且靈活的web server環境。具有非常低的內存開銷,cpu占用率低,效能好,以及豐富的模塊等特點。lighttpd是眾多OpenSource輕量級的web server中較為優秀的一個。支持FastCGI, CGI, Auth, 輸出壓縮(output compress), URL重寫, Alias等重要功能,而Apache之所以流行,很大程度也是因為功能豐富,在lighttpd上很多功能都有相應的實現了,這點對于apache的用戶是非常重要的,因為遷移到lighttpd就必須面對這些問題。

          3, Nginx ("engine x") 是一個高性能的 HTTP 和 反向代理 服務器,也是一個 IMAP/POP3/SMTP 代理服務器。 Nginx 是由 Igor Sysoev 為俄羅斯訪問量第二的 Rambler.ru 站點開發的,它已經在該站點運行超過兩年半了。Igor 將源代碼以類BSD許可證的形式發布。盡管還是測試版,但是,Nginx 已經因為它的穩定性、豐富的功能集、示例配置文件和低系統資源的消耗而聞名了。
          因為 Nginx 的文檔大部分是俄文的,Nginx 的中文維基的目的是幫助使用中文世界的用戶安裝、配置和交換有關 Nginx 的使用經驗。大部分文檔源自Aleksandar Lazic <al-nginx AT none DOT at>的工作。有關本維基本身的問題請直接詢問Cliff Wells <cliff AT develix DOT com>。

          Nginx 的中文維基:http://wiki.codemongers.com/NginxChs
          Nginx 的中文站: http://www.nginx.cn

          nginx 跟lighttpd隨時間的用戶群比較:

          posted @ 2008-07-18 12:59 小馬歌 閱讀(198) | 評論 (0)編輯 收藏
           

          1.拳頭之Get/Post
          拳頭是最基本的一重武器,也是最重要的,好比練武之人必須先扎穩馬步。

          java 代碼

          HttpClient httpclient=new HttpClient();//創建一個客戶端,類似打開一個瀏覽器  
          GetMethod getMethod=new GetMethod("http://www.blablabla.com");//創建一個get方法,類似在瀏覽器地址欄中輸入一個地址  
          int statusCode=httpclient.executeMethod(getMethod);//回車——出拳!  
          System.out.println("response=" + getMethod.getResponseBodyAsString());//察看拳頭命中情況,可以獲得的東西還有很多,比如head, cookies等等  
          getMethod.releaseConnection();//釋放,記得收拳哦  


          2.孔雀翎之支持https

          如何支持https?

          java 代碼
           
          static{  
              Protocol easyhttps = new Protocol("https", new EasySSLProtocolSocketFactory(), 443);  
              Protocol.registerProtocol("https", easyhttps);  
          }  

          在執行具體的http method之前,暗中將https協議注冊一把,如孔雀翎暗藏玄機,斃敵于無形。記住,官方的binary發行版本沒有ssl的contribute包,方法一是下載源代碼版本來打造你的孔雀翎。

          3.多情環之cookies
          常道人老多情,其實是記憶太多,所以情之所至,正如cookies甜心,無論你走到那,總把你牽掛:

          java 代碼
           
          HttpClient httpclient=new HttpClient();  
          httpclient.getParams().setCookiePolicy(CookiePolicy.RFC_2109);//RFC_2109是支持較普遍的一個,還有其他cookie協議  
          HttpState initialState = new HttpState();  
          Cookie cookie=new Cookie();  
          cookie.setDomain("www.balblabla.com");  
          cookie.setPath("/");  
          cookie.setName("多情環");  
          cookie.setValue("多情即無情");  
          initialState.addCookie(cookie);  
          httpclient.setState(initialState);  
          ...  


          4.離別鉤之解構cookies
          多情環的反面即離別鉤,鉤出,敵之身體某個部件即要與身體別離,端的是無情:

          java 代碼
           
          ...//執行了某些get/post方法后  
          Cookie[] cookies = httpclient.getState().getCookies();  
          System.out.println("Present cookies: ");  
          for (int i = 0; i < cookies.length; i++) {//循環結構零部件  
              System.out.println(" - " + cookies[i].toExternalForm());  
              System.out.println(" - domain=" + cookies[i].getDomain());  
              System.out.println(" - path=" + cookies[i].getPath());  
              ...            
          }  


          5.霸王搶之post參數
          槍,長兵器之王,諸多名將均使一桿或金或銀命名的名槍,比如岳飛。post方法在提交參數對時,猶如靈蛇出洞:

          java 代碼
           
          PostMethod postMethod = new PostMethod("http://www.saybot.com/postme");  
          NameValuePair[] postData = new NameValuePair[2];  
          postData[0] = new NameValuePair("武器", "槍");  
          postData[1] = new NameValuePair("什么槍", "神槍");  
          postMethod.addParameters(postData);  
          ...//出槍吧  


          6.七星碧玉刀之支持代理(proxy)
          代理,非常重要,尤其在局域網橫行的年頭,沒有代理,你在公司上不了QQ,沒有代理,google不了網頁快照,代理之威,可比七星碧玉刀,無刀,在局域網和開發當中,一切白搭:

          java 代碼
           
          HttpClient httpclient=new HttpClient();  
          httpClient.getHostConfiguration().setProxy("192.168.0.1", 9527);  
          httpClient.getParams().setAuthenticationPreemptive(true);//重要!!!告訴httpclient,使用搶先認證,否則你會收到“你沒有資格”的惡果  
          /* 
            這一步也至關重要,MyProxyCredentialsProvider實現了org.apache.commons.httpclient.auth.CredentialsProvider接口, 
            返回代理的credential(username/password)*/  
          httpClient.getParams().setParameter(CredentialsProvider.PROVIDER, new MyProxyCredentialsProvider());  
          httpClient.getState().setProxyCredentials(  
              new AuthScope("192.168.0.1",  
                  AuthScope.ANY_PORT, //任意端口哦,可要小心  
                  AuthScope.ANY_REALM),//任意域哦,可要小心  
          new UsernamePasswordCredentials("username",//proxy的用戶名  
                                  "password"));//proxy的密碼  

          ...

          7.長生劍之天下第一
          看httpclient的官方文檔:jakarta.apache.org/commons/httpclient/userguide.html
          看Hilton網友寫的小葵花寶典筆記:www.cnjm.net/tech/article1155.html
          通讀后,你會有種拔劍四顧心茫然的高手感覺。

          posted @ 2008-07-18 12:49 小馬歌 閱讀(1455) | 評論 (0)編輯 收藏
           

          2005年,全球空氣污染嚴重城市依次為:(中國)太原、米蘭、(中國)北京、(中國)烏魯木齊、墨西哥城、(中國)蘭州、(中國)重慶、:中國)濟南、(中國)石家莊、德黑蘭全球污染嚴重的的二十城市, 中國竟然占了16 國內空氣和其它污染日益嚴重

          2006年,世界衛生組織(WHO)將印度首都新德里列為全球污染嚴重城市,其后是開羅、加爾各答和中國的天津。中國有16城市位列前20名。倫敦排在第91位。
            
            五年前,山西省下康村的一千名村民突然發現村里的水落石出變咸了。水壺在燒完水后變成了紅色。“我開始拉肚子,病再沒好過,”陳女士說,“我和鄰居談起這事,他們抱怨自己也一樣。”幾月后,她雙腿癱瘓。現在她整天躺在木板床上。和許多村民一樣,這位農婦患腦血栓,半身不遂。27名村民已經因此死亡,其中有一名14歲的女孩。
              這個村莊如一座療養院。在村里的土路上,幾乎所有人都拄著拐仗一瘸一拐地走路。盡管陳女士的丈夫也病了,他還是背著妻子去看病,他們買不起輪椅。
              “要是我知道水里有毒,我怎么也不會喝啊,”陳女士哭著說,“可沒人告訴我們。”
              村民們常年飲用井水,盡管土壤已經被氯化物、硫酸鉀和硝酸鹽污染了。附近的鋼鐵廠和造紙廠把未經處理的廢水排入汾河。近十年間,兩家工廠的廢水排放量增長了數倍。
              下康村這樣的村莊在中國還有很多。比如淮河流域的黃孟營。流經此地的河水覆蓋著白色的泡沫。附近的味精公司污染了河水。在過去十年里,2400名村民中的110人死于癌癥。31歲的孔荷芹(音)亮出了醫生在她肚臍旁做的人造肛門。身患腸癌和甲狀腺癌的她在過去五年接受了四次手術和總計12療程的化療。
              “再也沒錢看病了,現在我只有等死。”這位兩孩子的母親說。
              今年中國的經濟增長率可能將達9%,出口也會大幅增加。“但這種奇怪不久就會結束,因為環境跟不上,”中國環保當局的一位負責人說,“我國最大的七條河流中的半數河水完全無法利用。四分之一的中國人得不到清潔的飲用水。”
              在中國,超過80%的垃圾和汗水得不到任何處理。每年有四十萬中國人死于廢氣引發的疾病。全球空氣污染嚴重的二十城市有16在中國,北京也位列其中,歐洲航天局通過衛星觀測發現北京是全世界污染嚴重的首都之一。
              盡管北京將工廠遷出了市區,可越來越多的汽車在污染空氣方面取而代之。而且工廠向張村遷移導致農村的污染愈發嚴重。投資者看上那里低廉的地價和更容易受賄的村官。與城市干部相比,他們對環境污染者更是睜一只眼閉一只眼。
              在中國北部的北山村,人的臉常常像煤一樣黑。自2001年起,這一地區建起了百余家煉焦廠和冶金廠。他們不僅為國內市場,也為日本和韓國生產。當地居民稱自己的家鄉為“黑三角”。一根根煙囪冒出黑黃白各色的濃煙。刺鼻的臭氣令人難以呼吸,雙眼疼痛。
              山頭的尸體在灰色的草地上腐爛。“工廠讓草都中了邪”,蒙古族牧羊人莊龍海(音)說,“我的370只綿羊和山頭在今年已經死了三十只。而且羊毛都是黑的!”
              姓楊的15歲少年戴著墨鏡,用尼龍頭巾裹住臉。他把石灰砸成小塊,裝進袋子,然后扛到一家煉焦廠。與牧羊人不同,他不抱怨空氣污濁。“我習慣了,而且我在這兒掙得不錯”,他說。他按袋子的數量領取薪水,每天能掙1.6歐元,要干十小時。上完小學二年級,楊就輟學了,他的父母付不起學費。
              中國為全世界提供產品,但本身從中獲益并不多。有些地方的工作條件與其說是21世紀的,不如說是19世紀的。
              這位環保當局負責人說:“生產同樣價值的產品,我們消耗的資源是日本的七倍、美國的近六倍、印度的近三倍。中國是世界工廠……但令我憂慮的是,中國正淪為地球的垃圾堆。”
              全球電腦的垃圾堆已經有了地址:離香港五小時車程的貴嶼鎮。在那里,十萬人生活在用竹竿和草墊搭建的棚屋里。屋外堆積著IBM的電腦、惠普的傳真機和博世公司的手機。這些電子垃圾是來自歐洲和美國的舶來品。那里到處散發著燒焦的電線和有毒酸液的氣味。

          posted @ 2008-07-16 00:37 小馬歌 閱讀(398) | 評論 (0)編輯 收藏
           
        1. 美心星巴克咖啡(興華路海上世界南山賓館113號)
        2. 臨海閣咖啡西餐廳(上沙九園村1巷14號13樓)
        3. 品尚品咖啡地帶福華路店(福華路福僑大廈2樓(近福星路))
        4. 騎士咖啡廳(嘉賓路4018號新時代酒店)
        5. 南都咖啡西餐廳松柏路店(橫崗鎮松柏路18號)
        6. 冰點咖啡廳(深圳市羅湖區人民南路聯華大廈2605室)
        7. 真鍋咖啡館(廣東省深圳市寶安區西鄉鎮桃源居3區1棟2號)
        8. 曼特林西餐咖啡廳(深圳市寶安區沙井鎮新橋村北環路73號1樓)
        9. 陽光咖啡分館(廣東省深圳市福田區振華路蘭光大廈地面首層)
        10. 嘉維咖啡廳(廣東省深圳市南山區創業南路西海灣花園B區商鋪56-57號)
        11. 夜港咖啡廳(廣東省深圳市南山區太子路海上世界廣場36-37號)
        12. 藍鳥咖啡西餐廳(廣東省深圳市南山區近海路招商服務大廈一樓南側)
        13. 上島咖啡科技店(廣東省深圳市南山區高新科技園南區高新南一道國微大廈附樓)
        14. 假日咖啡廳(廣東省深圳市羅湖區東門北路1006號公路大廈首層)
        15. 緣聚咖啡廳(深圳市福田區紅荔路1號青少年宮大家樂健身房2樓)
        16. 西雅圖咖啡廳(深圳市南山繽紛假日豪園38號)
        17. 樂美茄咖啡館(廣東省深圳市羅湖區深南東路5002號信廣場商場323單元)
        18. 雅蘭德咖啡屋(廣東省深圳市南山區南油大道繽紛假日豪園E座1層商鋪128號)
        19. 阿羅哈咖啡廳(深圳市福田區華強南路賽格苑一樓3016B)
        20. 名典咖啡語茶(天安店)(深圳市福田區天安數碼城創新科技廣場B座二樓)
        21. 名典咖啡語茶(福星路店)(福田區福星路102號1-2樓)
        22. 名典咖啡語茶(華強店)(福田區福強路南光名仕苑富仕閣1樓)
        23. 名典咖啡語茶(福源大廈店)(福田區彩田南路福源大廈2樓)
        24. 名典咖啡語茶(紅荔西路店)(福田區紅荔西路現代演藝中心2樓)
        25. 名典咖啡語茶(梅林店)(福田區梅林一村5區)
        26. 名典咖啡語茶(特報店)(福田區新洲路特報社公寓大樓1樓)
        27. 名典咖啡語茶(茂源大廈店)(羅湖區寶安南路茂源大廈2樓)
        28. 名典咖啡語茶(鳳凰路店)(羅湖區鳳凰路11號柏豪酒店1樓)
        29. 名典咖啡語茶(和平廣場店)(羅湖區和平廣場3樓)
        30. 名典咖啡語茶(富苑店)(羅湖區南湖路粵海花園1樓)
        31. 美心星巴克咖啡餐飲(廣東省深圳市福田區振華路45-1號富怡雅居首層)
        32. 美心星巴克咖啡餐飲(廣東省深圳市福田區振華路45-1號富怡雅居首層)
        33. 名典咖啡語茶(南山店)(南山區創業路90號怡海廣場西座)
        34. 名典咖啡語茶(蛇口店)(南山區蛇口太子路59號)
        35. 名典咖啡語茶(正大大廈店)(寶安區46區翻身路正大大廈123號)
        36. 名典咖啡語茶(西湖苑店)(龍崗區坪地鎮教育中路西湖苑商鋪1、2樓)
        37. 美心星巴克咖啡餐飲城市廣場分店(深南中路深圳市城市廣場首層1002號)
        38. 悠馨苑咖啡語茶(深圳市福田區蓮花路萬科金色家園一期裙樓102號)
        39. 意天利極品咖啡館(深圳市羅湖區深南東路地王大廈信興廣場南門旁)
        40. 摩天樓咖啡會所(廣東省深圳市南山區蛇口太子路18號海景廣場20E)
        41. 名香咖啡西餐吧(深圳市福虹路世貿商城二樓南側(294#-2106#商鋪))
        42. 馬沙拉咖啡廳(廣東省深圳市南山區蛇口工業區太子路海上世界廣場34號商鋪)
        43. 瑋霖咖啡(華僑城店)(深圳市南山區華僑城中旅廣場、華僑城銅鑼灣廣場二層L01)
        44. 瑋霖咖啡(蛇口店)(深圳市南山區蛇口海上世界太子路口南山賓館105、106號)
        45. 紅靴子咖啡廳(深圳市南山區蛇口海濱花園商業中心A座1樓)
        46. 湯美咖啡(南中店)(深圳市福田區深南中路2號新聞大廈1號樓103號)
        47. 湯美咖啡(深圳市南山區世界之窗景區前廣場咖啡廳)
        48. 湯美咖啡(深南東店)(深圳市福田區振華大廈首層西側)
        49. 湯美咖啡(彩田店)(深圳市福田區彩田南路3010號彩天名苑裙樓首層101室)
        50. 湯美咖啡(東門店)(深圳市福田區人民北路西解放路北名仕商城二棟首層)
        51. 玫瑰園咖啡廳(廣東省深圳市羅湖區東門南路華都園大廈17樓G、H室)
        52. 丘比特咖啡廳(廣東省深圳市羅湖區東門南路3002號華都園大廈21樓G室)
        53. 光明濃情咖啡(深圳市寶安區光明濱河苑4棟首層)
        54. 丹尼斯西餐咖啡廳(深圳市羅湖區深南東路3039號深房百貨二樓)
        55. 愛儂咖啡(南山區后海大道招商名仕鋪)
        56. 扎瓦咖啡(南山區創業路西海灣花園56、57號商鋪)
        57. 盛唐咖啡(南山區南光路鴻瑞花園首層19號商鋪)
        58. 老樹咖啡(羅湖區店)(羅湖區人民南路深房廣場首層北側)
        59. 老樹咖啡(灣畔店)(福田區白石洲中海深圳市灣畔花園右側裙樓2樓)
        60. 老樹咖啡(南新店)(南山區南新路向南西海花園E棟2樓)
        61. 老樹咖啡(科技園店)(南山區科技園深南花園2樓)
        62. 布萊梅之家(深圳市福田區振興路205棟102)
        63. 布萊梅之家(深圳市福田區振興路205棟102)
        64. 藍調咖啡(深圳市福田區紅荔路1007號)
        65. 那由他咖啡西餐廳CAFE NAYOOTA(深圳市華強南路上步商業大廈首層)
        66. 拿波里咖啡館(振興路2號上步工貿大廈一樓)
        67. 西雅圖西餐咖啡廳(0755-82340033)
        68. 天鵝堡咖啡廳(福田區燕南路96號格林酒店2樓)
        69. 西城西餐咖啡廳(福田區八卦二路上林苑酒店東側)
        70. 伊甸園西餐咖啡廳(羅湖區深南東路3039號)
        71. 冰工場(紅桂店)(羅湖區紅桂路2100號)
        72. ILLY咖啡 ITA COFFEE(福田區中信城市廣場國際休閑酒吧街A3棟(肯德基西側))
        73. 咖啡時間(CAFE TIME)(南山區蛇口海上世界廣場E區62號)
        74. 中世紀咖啡西餐廳(羅湖區寶安南路1050號湖北寶豐大廈首層)
        75. 那堤咖啡西餐廳(天安數碼城店)(福田區天安數碼城創新科技廣場B座2樓212)
        76. Mercents Coffee(福田區深南中路電子科技大廈A座首層)
        77. TTs Coffee(世界之窗店)(南山區華僑城世界之窗前廣場)
        78. TTs Coffee(創展店)(福田區安徽大廈創展中心)
        79. TTs Coffee(新聞大廈店)(福田區深南中路2號新聞大廈首層)
        80. TTs Coffee(振華大廈店)(羅湖區深南東路2102號振華大廈首層西側101#鋪)
        81. TTs Coffee(彩田南路店)(福田區彩田南路彩天名苑富島家居首層西側101#鋪)
        82. 星巴克(設計大廈店) STARBUCKS(福田區筍崗西路3001號市政設計大廈內)
        83. 星巴克(中信廣場店) STARBUCKS(福田區深南中路中信廣場首層)
        84. 品尚品咖啡(新洲店)(福田區新洲路中電信息大廈4樓)
        85. 南都咖啡西餐廳(吉廈村店)(龍崗區布吉鎮吉廈村沙平南路82號)
        86. 南都咖啡西餐廳(金鵬路店)(龍崗區布吉鎮金鵬路13號2樓)
        87. 南都咖啡西餐廳(蓮花路店)(龍崗區布吉鎮蓮花路38號)
        88. 南都咖啡西餐廳(六約店)(龍崗區橫崗鎮深惠路六約段446號)
        89. 南都咖啡西餐廳(松柏路店)(龍崗區橫崗鎮松柏路18號)
        90. 南都咖啡西餐廳(龍城店)(龍崗區龍崗鎮深惠路622號)
        91. 南都咖啡西餐廳(怡興店)(龍崗區坪山鎮立新西路18號)
        92. 綠茵閣咖啡廳(春風店)(羅湖區東門南路1031號)
        93. 星巴克(佳寧娜店)(羅湖區人民南路佳寧娜廣場內)
        94. 星巴克(佳寧娜店)(羅湖區人民南路佳寧娜廣場內)
        95. 上島咖啡(福華店)(福田區福華路146號)
        96. 上島咖啡(中深店)(福田區紅嶺中路中深國際大廈2樓)
        97. 上島咖啡(景田東路店)(福田區景田東路32號)
        98. 上島咖啡(華僑城店)(南山區華僑城美加廣場A-101商鋪(近歡樂谷))
        99. 上島咖啡(南山店)(南山區南山大道桃苑內)
        100. 上島咖啡(蛇口店)(南山區蛇口內環路4號世紀廣場南座1樓)
        101. 畢加索咖啡屋(龍崗鎮深惠公路旁美洲大廈首層)
        102. 咖啡時間(太子路海上世界廣場E62鋪)
        103. 西堤島咖啡華僑城店(華僑城波托菲諾純水岸商業街)
        104. 空中咖啡廳(東濱路文化廣場4樓)
        105. 三智老樹咖啡(東環一路金城大廈)
        106. 西部牛仔咖啡廳(登良路99號惠中名苑B02商鋪)
        107. 慧蓉西餐咖啡廳(濱河大道5022號聯合廣場B座首層)
        108. 典之最咖啡店(創業路90號怡海廣場)
        109. 意天利咖啡東湖店(太寧路東湖吉之島L1-01鋪)
        110. 上島咖啡(寶民一路店)(寶安區7區寶民一路394號)
        111. 仙蹤林(振興店)(福田區振興路15號)
        112. 耶士咖啡(保利店)(南山區南油大道創業路口保利大廈大堂)
        113. 耶士咖啡(蛇口店)(南山區蛇口鴻隆公寓一樓110、111號)
        114. 卡碧桃咖啡吧(東海花園店)(福田區農科中心香軒路東海坊東海花園G33B、35、36、38號)
        115. 耶仕咖啡(景田店)(福田區景田北路77號擎天大廈一樓)
        116. 尋蝶坊咖啡廳(羅湖區深南東路5001號華潤大廈萬象城一層)
        117. 愛琴海咖啡廳(福田區深南中路水務集團萬德大廈二樓)
        118. 澳洲星迪咖啡(景田店)(福田區紅荔西路第一世界廣場歲寶明星店首層)
        119. 澳洲星迪咖啡(華僑城店)(南山區華僑城銅鑼灣廣場)
        120. 摩得咖啡(福田區中心區民田路新華保險大廈1樓106號)
        121. 潤石咖啡茶語(福田區百花二路百花公寓3棟工商銀行二樓)
        122. 名典咖啡語茶(坂田店)(布吉鎮坂田五和大道17區25棟)
        123. 名典咖啡語茶(華僑城店)(華僑城西街OCT生態廣場A區201號)
        124. 名典咖啡語茶(鴻瑞店)(南光路鴻瑞花園三期20-21號)
        125. 名典咖啡語茶(鴻瑞店)(南光路鴻瑞花園三期20-21號)
        126. 品尚品咖啡(福僑店)(深圳市福田區福僑大廈二樓)
        127. 品尚品咖啡(寶安店)(深圳市寶安區寶安三區建安一路29號2樓)
        128. 品尚品咖啡(金花街店)(深圳市羅湖區金華街13號)
        129. 品尚品咖啡(瑞和園店)(深圳市福田區益田路(福民路口))
        130. 品尚品咖啡(銅鑼灣店)(深圳市福田區華強北路1號銅鑼灣廣場C座2樓)
        131. 品尚品咖啡(福華路店)(深圳市福田區福華路福僑大廈2樓)
        132. 品尚品咖啡地帶(翠竹店)(深圳市羅湖區翠竹路逸翠閣2期2層201號商鋪)
        133. 品尚品咖啡廳(深圳市南山區蛇口工業區太子路32號二樓)
        134. 那堤咖啡廳(福田區車公廟天安數碼城創新科技廣場B座2樓)
        135. 域咖咖啡坊(深圳市羅湖區蔡屋圍松園北路鴻翔花園商鋪1037-1038號)
        136. 綠茵閣咖啡廳(深圳市福田區深南中路赤尾大廈二層)
        137. 王朝咖啡(羅湖區愛國路1056號)
        138. 茗香咖啡(鉆石店)(羅湖區南湖路鉆石廣場3樓)
        139. 上島咖啡(寶麗店)(羅湖區寶安南路寶麗大廈一樓)
        140. ILLY COFFEE(深圳市南山區華僑城)
        141. 米蘿咖啡寶安鴻景園店(寶安寶民一路鴻景園)
        142. 92℃咖啡館(南園路72號(上步大廈旁))
        143. 那由他咖啡西餐廳(上步商業大廈首層)
        144. SPR COFFEE(僑城店)(深圳市華僑城波托菲諾會所商業小鎮055號)
        145. 沁香咖啡屋(羅湖區愛國路建國大廈一樓)
        146. 雅典世家西餐咖啡廳(福田區東園路150號玉福樓首層)
        147. 星巴克(茂業店)STARBUCKS(深圳市福田區華強北路2006號茂業百貨首二層C01號鋪)
        148. 星巴克(萬象城店)(羅湖區寶安南路華潤中心萬象城內)
        149. ITALIAN BEST COFFEE意式咖啡館(深圳市福田區中航苑航城大廈東座1樓(天虹商場背面))
        150. 午后濃香咖啡館(蛇口店)(南山區蛇口工業區太子路海上世界明華輪首層)
        151. 午后濃香咖啡館(嘉匯百貨店)(福田區深南大道嘉匯百貨1樓)
        152. 星巴克STARBUCKS (海上世界店)(南山區蛇口海上世界)
        153. 中電商務會所觀景咖啡廳(深圳市深南中路電子科技大廈A座38樓(電梯至37樓,再上一層樓梯))
        154. 午后濃香咖啡館(華僑城店)(南山區華僑城OCT生態廣場酒吧街A110)
        155. 羅馬之戀咖啡廳(南山區華僑城華夏藝術中心二樓)
        156. 羅馬之戀咖啡廳(南山區華僑城華夏藝術中心二樓)
        157. 廊橋尋味(福田區上步南路1001號錦峰大廈一樓)
        158. 皇室咖啡(購物公園北園A座313室)
        159. 陽光英語咖啡屋()
        160. 深圳市沒有的咖啡(鹽田)
        161. 南都咖啡西餐廳怡興店(坪山鎮立新西路18號[深圳市])
        162. 皇家咖啡館(蔡屋圍金塘街)
        163. 好景豪園會所餐廳(福榮路好景豪園會所(近沙咀牌坊))
        164. 南都咖啡西餐廳吉廈村店(布吉鎮吉廈村沙平南路82號)
        165. TTs Coffee振華大廈店(深南東路2102號振華大廈首層西側101#鋪)
        166. TTs Coffee世界之窗店(華僑城世界之窗前廣場)
        167. 南都咖啡西餐廳六約店(橫崗鎮深惠路六約段446號)
        168. 南都咖啡西餐廳蓮花路店(布吉鎮蓮花路38號)
        169. 真鍋珈琲館清華店(前進路桃源居三區壹棟02)
        170. TTs Coffee新聞大廈店(深南中路2號新聞大廈首層)
        171. 名典咖啡語茶沙頭角店(沙頭角沙深路海濱花園)
        172. 老樹咖啡深房廣場店(人民南路深房廣場首層北側)
        173. 響99咖啡廳(西鄉鎮河西路2號)
        174. 西堤島咖啡財富廣場店(深南大道財富廣場B座127商鋪)
        175. 星期六咖啡廳(創業東路海岸明珠首層)
        176. 真鍋珈琲館投資大廈店(深南大道4009號投資大廈大堂)
        177. 品味咖啡(景田南路國泰豪園2樓)
        178. 夢騰樹咖啡(上步工業區501棟振興賓館首層)
        179. 名雅咖啡經典(愛國路新豐大廈1樓)
        180. 萬家好咖啡經典(上步南路1067號)
        181. 濱樂咖啡金光華店(人民南路2028號金光華廣場L2-076號)
        182. 左岸工作室(紅荔路TCBY旁)
        183. 伯朗咖啡(蓮花路萬科金色家園106號)
        184. 好莉萊咖啡廳(南海大道海王大廈1樓中廳大堂)
        185. 南油酒店咖啡廳(東濱路南油酒店內)
        186. 卡地咖啡(前海路港灣麗都裙樓)
        187. 卡地咖啡(前海路港灣麗都裙樓)
        188. 綠茵苑咖啡廳(湖貝路1085號)
        189. 香榭麗舍咖啡廳碧馨苑店(福民路碧馨苑首層)
        190. 香典西餐咖啡語茶(文錦渡錦聯路運通大樓2樓)
        191. 濱樂咖啡寶麗店(寶安南路2052號寶麗大廈1樓)
        192. 亞美茄咖啡館(深南東路5002號地王大廈信興廣場3樓323)
        193. 午后濃香咖啡館嘉匯百貨店(深南大道嘉匯百貨1樓(近上海賓館))
        194. 非非想時尚發型·咖啡(寶安南路1881號萬象城4樓422商鋪)
        195. 得意坊咖啡廳(蔡屋圍新九坊38號)
        196. 綠茗軒咖啡語茶(福中路17號人才大廈1樓)
        197. 綠島咖啡(人民南路2010號發展中心大廈1層)
        198. 富苑酒店廣場咖啡廳(南湖路3018號富苑酒店1樓)
        199. 左岸咖啡(寶安35區上川路163號)
        200. 美之廬空中御花園(春風路廬山大廈)
        201. 雅嘉樂咖啡茶語車公廟店(車公廟)
        202. 薌茗咖啡秀(振華路家樂大廈2樓)
        203. 怡情咖啡店(布吉鎮吉華路德興城1樓)
        204. 雅典咖啡店(華強北路南方大廈首層)
        205. 鳳凰咖啡廳(鳳凰路179號)
        206. 深南大道西餐咖啡(深南中路興華賓館側愛華電腦大廈附樓2樓)
        207. 緣聚咖啡語茶(紅荔路1號青少年活動中心大家樂健美苑2樓)
        208. 名藝咖啡語茶(振華路深紡大廈C座2樓)
        209. 茗香咖啡精典橫崗店(橫崗鎮四聯路56號)
        210. 彭年咖啡廳(嘉賓路2002號希爾頓彭年酒店2樓)
        211. 意天利咖啡航城店(中航苑航城大廈1樓)
        212. 茗香咖啡精典福虹店(福虹路世貿商城2樓南側)
        213. 西典咖啡藝茶(百草園商業街6號(近華潤超市))
        214. 心琴咖啡吧(紅嶺大廈云鵬酒店1樓)
        215. 雅嘉樂咖啡茶語福星店(福星路福永樓2樓)
        216. 茗香咖啡精典愛國路店(愛國路1052號A座新王朝酒店1樓)
        217. 海韻咖啡廳(紅荔路四川大廈首層)
        218. 海韻咖啡廳(紅荔路四川大廈首層)
        219. 圣淘沙西餐咖啡廳(文錦路2號)
        220. 陽光咖啡館振華路店(振華路蘭光大廈首層)
        221. 茗香咖啡精典總店(翠竹路1056號逸翠園102號)
        222. 意天利咖啡華僑城店(波托菲諾純水岸商業街內)
        223. 休閑小筑咖啡廳(紅荔路上步工業區201幢109室)
        224. TTs Coffee創展店(深南大道6007號安徽大廈創展中心)
        225. 耶士咖啡海上世界店(太子路海上世界廣場鴻隆公寓1樓商鋪110號)
        226. 耶士咖啡保利店(南海大道創業路口保利大廈大堂)
        227. 香榭里咖啡名店(48區寶華花園A棟首層8號)
        228. 艾凡里咖啡語茶(學府路138號)
        229. 檸香草咖啡西餐吧(新洲路新洲北村31號)
        230. 品尚品咖啡地帶布吉信義店(布吉百鴿信義假日名城菁華園EF棟E座)
        231. 名典咖啡語茶粵海店(深南東路3033號粵海酒店109號(2、10、29、223路))
        232. 星巴克茂業店(華強北路2006號茂業百貨首二層C01號鋪)
        233. Marine Coffee(太子路太子廣場G13號商鋪)
        234. 星巴克設計大廈店(筍崗西路3001號市政設計大廈內)
        235. 迪歐咖啡寶安總店(3區龍井路59號外貿大樓)
        236. 星巴克萬象城店(寶安南路1881號華潤中心萬象城B99號鋪)
        237. 星迪咖啡(華僑城銅鑼灣廣場2樓)
        238. 西典咖啡藝茶紅桂店(紅桂大廈4樓)
        239. 金地品尚品中西餐廳(金地四路112棟2層)
        240. 品尚品咖啡地帶銅鑼灣店(華強北路1號銅鑼灣廣場C座2樓)
        241. 香榭麗舍咖啡廳科技大廈總店(太寧路85號科技大廈首層)
        242. 上島咖啡蛇口店(東濱路4號世紀廣場南座1樓)
        243. 上島咖啡福華店(福華路146號)
        244. 午后濃香咖啡館華僑城店(華僑城OCT生態廣場酒吧街A110)
        245. 耶士咖啡華僑城店(華僑城波托菲諾風情街55號)
        246. 米蘿咖啡東方店(107國道松崗段(東方大道))
        247. 獅邁咖啡(蛇口工業七路(四海公園南門))
        248. 星巴克蛇口店(南海大道蛇口花園城中心首層132號鋪(沃爾瑪對面))
        249. 星巴克蛇口店(南海大道蛇口花園城中心首層132號鋪(沃爾瑪對面))
        250. 名典咖啡語茶西湖苑店(坪地鎮教育中路西湖苑商鋪1、2樓)
        251. 茗香咖啡精典峰景臺店(怡景路11號峰景臺地鋪15號)
        252. 耶士咖啡景田店(景田北路77號擎天大廈1樓)
        253. KOSMO萬象店(寶安南路1881號華潤中心萬象城首層)
        254. 觀星臺咖啡廳中信廣場店(深南中路1095號中信城市廣場4樓412)
        255. 甜心咖啡語茶(大學城西麗大街37-39號)
        256. 觀星臺咖啡廳順電家居店(華強北順電家居廣場五樓)
        257. 麥咖啡(東門老街西華宮麥當勞2層)
        258. 名典咖啡語茶茂源大廈店(寶安南路茂源大廈2樓)
        259. 山脈咖啡廳(觀瀾鎮高爾夫大道觀瀾球會內駿豪酒店)
        260. 盛唐咖啡南山店(南光路鴻瑞花園正門口)
        261. 藍鳥咖啡機場店(深圳市國際機場安檢內衛星廳國內出發6—11號登機口旁)
        262. 鋼琴吧(觀瀾鎮高爾夫大道觀瀾球會內駿豪酒店)
        263. 南都咖啡西餐廳龍城店(龍崗鎮深惠路622號)
        264. 名典咖啡語茶福源大廈店(彩田南路福源大廈2樓)
        265. 品尚品咖啡地帶翠竹店(翠竹路1058號翡翠星空大廈2樓)
        266. 悟魚咖啡(工業八路招商花園城三期3棟15號鋪)
        267. 星巴克銅鑼灣店(華發北路1號銅鑼灣廣場A座底商)
        268. 萊茵河咖啡(香梅路香逸名園首層)
        269. 名典咖啡語茶鳳凰路店(鳳凰路11號柏豪酒店1樓)
        270. 名典咖啡語茶振興中路店(振興中路73號)
        271. 上島咖啡華僑城店(華僑城美加廣場A-101商鋪(近歡樂谷))
        272. 老樹咖啡南新店(南新路向南西海花園E棟2樓)
        273. KOSMO蛇口店(太子路海上世界廣場115號南山賓館1樓)
        274. 迪歐咖啡(前進路冠利達大廈首層)
        275. 星巴克機場店(深圳市國際機場B號候機樓1樓BS1-11號鋪)
        276. 上島咖啡南山店(南山大道桃苑內)
        277. 星巴克中信廣場店(深南中路1095號中信城市廣場1樓1002號鋪)
        278. 名典咖啡語茶蛇口店(蛇口太子路59號)
        279. 名典咖啡語茶特報店(新洲路特報社公寓大樓1樓)
        280. 名典咖啡語茶特報店(新洲路特報社公寓大樓1樓)
        281. 藍鳥咖啡蛇口店(近海路招商服務大廈旁(海月花園對面))
        282. 名典咖啡語茶梅林店(梅林一村5區商業城210號)
        283. 老樹咖啡科技園店(科技園深南花園2樓)
        284. 星巴克海上世界店(太子路海上世界廣場南山賓館113號鋪)
        285. 星巴克佳寧娜店(人民南路2002號佳寧娜廣場1樓)
        286. KOSMO中信店(深南中路1095號中信城市廣場LG層111號)
        287. 意天利咖啡地王一店(深南東路5002號地王大廈信興廣場南門兩側)
        288. 米蘿咖啡紅荔店(紅荔西路金色假日茗苑(景田南路口))
        289. UCC COFFEE SHOP(解放路3034號湖北賓館2樓)
        290. 意天利咖啡萬象城店(寶安南路1881號華潤中心萬象城地下1層)
        291. 名典咖啡語茶和平廣場店(和平廣場3樓)
        292. 澳洲星迪咖啡廳景田店(景田歲寶明星店西側1樓)
        293. 別克喬治(深南大道東座酒店首層)
        294. 老樹咖啡灣畔店(白石洲中海深圳市灣畔花園右側裙樓2樓)
        295. 名典咖啡語茶華強店(福強路南光名仕苑富仕閣1樓)
        296. 悠馨苑(蓮花路萬科金色家園一期102號)
        297. 十月咖啡館(桃園路86號天虹商場2樓(近常興路))
        298. 大班咖啡(沙頭角碧桐灣休閑中心2樓(近海關))
        299. 名典咖啡語茶福星路店(福星路102號1-2樓)
        300. 名典咖啡語茶紅荔西路店(紅荔西路現代演藝中心2樓)
        301. 名典咖啡語茶富苑店(南湖路粵海花園1樓)
        302. 風尚西餐廳(蛇口工業七路67號維園大廈1-2樓)
        303. 盛唐咖啡寶安店(寶安4區前進一路御景臺)
        304. 星巴克購物公園店(福華三路星河蘇活購物公園首層L1S-001號鋪)
        305. 藍鳥咖啡科技園店(高新南十一路陽光帶海濱城裙樓)
        306. 茗香咖啡精典洪湖店(洪湖路北湖花園碧濤閣2樓C)
        307. 海月咖啡廳(工業大道南山大廈107-109)
        308. 上島咖啡景田東路店(景田東路32號(財政局對面))
        309. 澳洲星迪咖啡廳銅鑼灣店(華僑城銅鑼灣廣場2樓)
        310. 星巴克太陽廣場店(解放路2001號太陽廣場1-112A號鋪)
        311. 星巴克太陽廣場店(解放路2001號太陽廣場1-112A號鋪)
        312. 上島咖啡寶民一路店(7區寶民一路394號)
        313. 意天利咖啡茂業華強店(華強北路2006號茂業百貨5樓)
        314. 意天利咖啡地王二店(深南東路5002號地王大廈信興廣場414)
        315. 品尚品咖啡地帶瑞和園店(益田路瑞和園瑞馨閣(福民路口))
        316. 喬治別克華強南路店(濱河大道華強南路口三九發展大廈2樓)
        317. 上島咖啡中深店(紅嶺中路中深國際大廈2樓)
        318. 西典咖啡藝茶南山店(學府路康樂大廈)
        319. 品尚品咖啡地帶振華店(振華東路航天立業華庭二樓(近上步路燕南路))
        320. ITA COFFEE(深南中路1095號中信城市廣場酒吧街A3棟)
        321. 休閑小居(鳳凰路149號)
        322. 喬治別克帝都店(紅荔路7058號帝都酒店1樓)
        323. 西典咖啡藝茶龍崗店(中心城碧湖花園首層)
        324. 西典咖啡藝茶坂田店(布吉鎮坂田)
        325. 品尚品咖啡地帶寶安店(寶安三區建安一路29號2樓)
        326. 星巴克蛇口花園城店(南海大道蛇口花園城中心首層132號鋪)
        327. 茵欣咖啡廳(南海大道工業一路1號南海酒店1樓)
        328. 尼斯咖啡廳(平湖街道辦華南大道1號華麗城貴賓樓)
        329. 金輝嘉柏酒店西餐廳(深南大道國際市長交流中心金輝嘉柏酒店1樓)
        330. 夜港咖啡吧(太子路海上世界廣場C36-C37鋪)
        331. 迪歐咖啡沙井店(沙井鎮萬豐村新沙路萬豐酒店內)
        332. 美麗華咖啡廳(蛇口港灣一路2號)
        333. 長城大酒店咖啡廳(紅桂路2086號長城大酒店內(近寶安南路))
        334. 米蘿咖啡麗景店(76區麗景城11棟101號)
        335. 老樹咖啡寶安店(寶安25區華豐廣場1-2樓)
        336. 迪歐咖啡福永店(福永鎮龍翔北路1號)
        337. 星巴克邊檢站店(羅湖區邊檢站內)
        338. 品尚品咖啡地帶湖貝店(湖貝路1017號1-2樓)
        339. 迪歐咖啡前進路店(前進路冠利達大廈首層)
        340. 喬治別克香蜜湖店(香蜜湖東座酒店首層(近深南大道))
        341. 品尚品咖啡地帶新洲店(新洲路中電信息大廈4樓)
        342. 品尚品咖啡地帶新洲店(新洲路中電信息大廈4樓)
        343. 圣淘沙咖啡語茶(蛇口后海大道129-130號)
        344. 星巴克金光華店(人民南路2028號金光華廣場B1-106號鋪)
        345. 品尚品咖啡地帶星河國際店(福華三路星河國際首層)
        346. 地址:http://www.sz880.com/index.php?title=%E6%B7%B1%E5%9C%B3%E5%92%96%E5%95%A1%E5%8E%85%E5%88%97%E8%A1%A8

          其中 星巴克 深圳 52家:http://map.baidu.com/bendi/#word=%D0%C7%B0%CD%BF%CB+%C9%EE%DB%DA&ct=120&bs=020_10&rn=10&pn=0&&dbs=000

          posted @ 2008-07-07 14:47 小馬歌 閱讀(2605) | 評論 (0)編輯 收藏
           

          簡單的可以這樣:
          1,首先要打開core文件限制:ulimit -c unlimited
          2,gdb app corefile
          3,bt,顯示堆棧信息


          有兩個關于如何調試的詳細頁面:
          用GDB調試程序(zt) 
          http://www.linuxsir.org/bbs/showthread.php?t=171156
          http://www.trucy.org/blog/archives/eoiae/000087.html
          posted @ 2008-06-19 17:55 小馬歌 閱讀(326) | 評論 (0)編輯 收藏
           

          一、JSTL 簡介
               JSTL是一個不斷完善的開放源代碼的JSP標簽庫,是由apache的jakarta小組來維護的。JSTL只能運行在支持JSP1.2和Servlet2.3規范的容器上,如tomcat 4.x。但是在即將推出的JSP 2.0中是作為標準支持的。
          JSTL包含兩個部分:標簽庫和EL(Expression Language表達式語言)語言。
          JSP標準標記庫(JSP Standard Tag Library,JSTL)是一個實現Web應用程序中常見的通用功能的定制標記庫集,這些功能包括迭代和條件判斷、數據管理格式化、XML操作以及數據庫訪問。
          JSTL 1.0 有四個定制標記庫:core、format、xml 和 sql.
          1.core 標記庫提供了定制操作,通過限制了作用域的變量管理數據,以及執行頁面內容的迭代和條件操作。
          2.format 標記庫定義了用來格式化數據(尤其是數字和日期)的操作。它還支持使用本地化資源束進行 JSP 頁面的國際化。
          3.xml 庫包含一些標記,這些標記用來操作通過 XML 表示的數據。
          4.sql 庫定義了用來查詢關系數據庫的操作。

          二、表達式語言(Expression Language)
          1.隱含對象(常用)
          1)requestScope:與請求作用域屬性的名稱和值相關聯的 Map 類
          2)sessionScope:與會話作用域屬性的名稱和值相關聯的 Map 類  
          3)applicationScope:與應用程序作用域屬性名稱和值相關聯的 Map 類
          4)pageScope:與頁面作用域屬性的名稱和值相關聯的 Map 類
          5)param:按名稱存儲請求參數的主要值的 Map 類
          6)paramValues:請求參數的所有值作為 String 數組存儲的 Map 類
          2.EL 表達式的格式:
          用美元符號($)定界,內容包括在花括號({})中,eg:${value}
          3.EL的存取器:使用點運算符(.)和方括號運算符([]).
          1)點運算符通常用于訪問對象的特性。例如,在表達式 ${user.firstName} 中,使用點運算符來訪問 user 標識符所引用對象的名為 firstName 的特性。
          2)方括號運算符用來檢索數組和集合的元素。在數組和有序集合的情況下,把要檢索的元素的下標放在方括號中。對于實現 java.util.Map 接口的集合,方括號運算符使用關聯的鍵查找存儲在映射中的值。在方括號中指定鍵,并將相應的值作為表達式的值返回。
          3)點運算符和方括號運算符可能實現某種程度的互換
          4.EL運算符
          1)算術運算符: +、-、*、/(或 div)和 %(或 mod)
          2)關系運算符: ==(或 eq)、!=(或 ne)、<(或 lt)、>(或 gt)、<=(或 le)和 >=(或 ge)
          3)邏輯運算符: &&(或 and)、||(或 or)和 !(或 not)
          4)驗證運算符: empty
          三、常用的JSTL core tag
          1.set定義變量標記:定義限制了作用域的變量
          Syntax:
          1):<c:set value=”value” var=”varName” [scope=”{page|request|session|application}”]/>
          2):<c:set var=”varName” [scope=”{page|request|session|application}”]> body content   </c:set>
          2.out打印標記:顯示表達式的值,取代jsp scriptlet中的<%=variableName%>
          Syntax:
          1):<c:out value=”${variableNam}” [escapeXml=”{true|false}”]> default value </c:out>
          2):<c:out value=”value” escapeXml=”{true|false}”] [default=”defaultValue”] />
          3.forEach循環標記(for/while):提供指定的循環次數(適用syntax 2)或在某個數據結構(Collection/Array)(適用syntax 1)上進行循環的能力
          Syntax:
          1):<c:forEach [var=”varName”]   items=”collection”   [varStatus=”varStatusName”]    [begin=”begin”]   [end=”end”]   [step=”step”] > body content </c:forEach>
          2):<c:forEach   [var=”varName”]   [varStatus=”varStatusName”] begin=”begin”   end=”end”   [step=”step”]> body content</c:forEach>
          4.forTokens循環標記:允許對一個String值進行循環,使用所選擇的字符作為記號(token)之間的定界符
          Syntax:
          <c:forTokens items="stringOfTokens" delims="delimiters" [var="varName"] [varStatus="varStatusName"] [begin="begin"] [end="end"] [step="step"]> body content </c:forTokens >
          5.if條件求值標記(if):只在指定的測試條件為真時求具體的值,沒有”else”條件—要么執行要么忽略執行體
          Syntax:
          1):<c:if test=”testCondition” var=”varName” [scope=”{page|request|session|application}”]/>
          2):<c:if test=”testCondition” [var=”varName”] [scope=”{page|request|session|application}”]>body content</c:if>
          6.choose條件求值標記(switch-case/if-else):使用嵌套when標記(類似case)和otherwise標記(可選,類似default)
          Syntax:
          1):<c:choose> body content (<when> and <otherwise> subtags)</c:choose>
          2):<c:when test=”testCondition”>body content</c:when>
          3):<c:otherwise> conditional block</c:otherwise>
          7.remove 刪除變量標記:用來刪除限制了作用域的變量的
          Syntax:
          <c:remove var=”varName” [scope=”{page|request|session|application}”]/>
          四、開始使用JSTL
          1.必需的文件:
          1)jar檔:jstl.jar,standard.jar.一般是放置在lib目錄下
          2)tld文件:c.tld,一般會是在WEB-INF目錄下,依tld文件的位置修改web.xml文檔
          3)一個web.xml的例子:
          <?xml version="1.0" encoding="UTF-8"?>
          <!DOCTYPE web-app PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN" "http://java.sun.com/dtd/web-app_2_3.dtd">
          <web-app>
             <taglib>
               <taglib-uri>http://java.sun.com/jstl/core</taglib-uri>
               <taglib-location>/WEB-INF/c.tld</taglib-location>
             </taglib>   
          </web-app>
          2.在JSP頁面中聲明標記庫:
          <%@ taglib prefix="c" uri="http://java.sun.com/jstl/core" %>
          五、參考資料
          JSTL規范:http://java.sun.com/products/jsp/jstl/index.jsp
          JSTL 1.0相關下載:http://www.apache.org/dist/jakarta/taglibs/standard-1.0/
          JSTL1.0規范書:http://www.jcp.org/aboutJava/communityprocess/first/jsr052/index.html
          表達式語言:http://www-900.ibm.com/developerWorks/cn/java/j-jstl0211/

          posted @ 2008-06-16 16:37 小馬歌 閱讀(2925) | 評論 (0)編輯 收藏
          僅列出標題
          共95頁: First 上一頁 84 85 86 87 88 89 90 91 92 下一頁 Last 
           
          主站蜘蛛池模板: 温州市| 延寿县| 湖州市| 玛沁县| 潼南县| 忻城县| 宜兴市| 津南区| 洪江市| 玛曲县| 九江市| 临洮县| 襄城县| 确山县| 旬邑县| 泽普县| 兴宁市| 梓潼县| 城口县| 长兴县| 穆棱市| 阳泉市| 道真| 凤庆县| 长汀县| 玉山县| 溧水县| 瓦房店市| 白河县| 宁都县| 内江市| 民乐县| 沂南县| 镇安县| 特克斯县| 广丰县| 诸暨市| 屏南县| 望奎县| 临西县| 临城县|