|
Subject: Servlet + JSP + mysql jdbc + chinese
From: Yuan-Chen Cheng <ycheng@phi.sinica.edu.tw>
Organization: FreeBSD Taiwan News Server.
Date: 20 Sep 2000 16:31:29 GMT
To: freebsd-taiwan-doc@freebsd.sinica.edu.tw
Reply-To: freebsd-taiwan-doc
--------------------------------------------------------------------------------
[ This is a repost of the following article: ]
[ From: Yuan-Chen Cheng <ycheng@sinica.edu.tw> ]
[ Subject: Servlet + JSP + mysql jdbc + chinese ]
[ Newsgroups: tw.bbs.comp.386bsd ]
[ Message-ID: <8qaog9$6mj$2@news1.sinica.edu.tw> ]
JSP / Servlet 怎樣才能處理中文.
順便談 mysql jdbc + 中文
鄭原真 (ycheng@sinica.edu.tw)
Copyright 2000.
本文版權 : GPL or BSD style, 請保留作者姓名。
本文假設你已經會使用 JSP 或是 Servlet 撰寫英文的 Web-Page.
如果你還不會,或是根本不知道 JSP 或是 Servlet 是幹什麼的,
那這篇文章不是寫給你看的。
在 Java Servlet Spec v2.0 中,對於多國語言的支援,並不足。
你必須找到 Java Servlet Spec v2.2 的實作才行,筆者試過的
是 Apache Jakarta Tomcat 3.1 軟體(註一)。
本文測試平台是 Debian Woody, Sun jdk1.2.2, Tomcat 3.1,
mm.mysql-2.0.2
Java Server 如何處理中文.
前言
首先, 如何正確的了解你一個 Big5 中文在 Java 中是正確的
中文 Unicode 呢 ?
輸出一個 String("今").length() 吧 ! 由於 "今" 在 Big5 是由兩個
byte 組成, 但對 java 來說,java 的字元是 unicode, 也就是說,
無論是一個英文字或是一個中文字,其 length() 都是 1. 也就是說,
(new String("今")).length() ==> 1。才是正確的。
Servlet 輸出中文的一個例子.
下面是一個典型的 Java Servlet.
HelloWorldExample.java =>
----------- cut here -----------------
import java.io.*;
import java.text.*;
import java.util.*;
import javax.servlet.*;
import javax.servlet.http.*;
public class HelloWorldExample extends HttpServlet {
public void doGet(HttpServletRequest request,
HttpServletResponse response)
throws IOException, ServletException
{
response.setLocale(new Locale(new String("zh"), new String("TW")));
response.setContentType("text/html");
PrintWriter out = response.getWriter();
out.println("<html>");
out.println("<head>");
String title = new String("hello 大家好");
out.println("<title>" + title + "</title>");
out.println("</head>");
out.println("<body bgcolor=\"white\">");
out.println("<body>");
out.println("<p>");
out.println("<h1>" + title + "</h1>");
out.println("</body>");
out.println("</html>");
}
}
----------- cut here -----------------
可以正常輸出中文的關鍵是:
response.setLocale(new Locale(new String("zh"), new String("TW")));
注意這一行應該要放在
PrintWriter out = response.getWriter();
之前執行。另外編譯時注意
javac -encoding Big5 HelloWorldExample.java
或是 (linux 上的 jdk1.2.2)
export LANG=zh_TW.Big5
export LC_CTYPE=zh_TW.Big5
javac HelloWorldExample.java
注意, 這個例子在 jserv v1.1.2 並不能 work, 因為該版本實做的
JavaSoft Java Servlet APIs 2.0, 而 setLocale 是到
Servlet APIs 2.2 才有。
Java Server Page 如何處理中文
在此簡略說明,先看下面的例子:
test.jsp
----------------------
<%@ page contentType="text/html; charset=big5" %>
<html>
<body bgcolor="white">
中文TEST.<p>
<%= (new String("今天")).length() %>
</body>
</html>
----------------------
關鍵在第一行。有了這一行就行了。
For Hacker:
理論上這一行可以放在文件的任何地方,但由於 Java 時做上
開檔案後通常就必須指定 encoding,當 java jsp engine 發現 charset
跟 default 不同時,通常必須重新開檔案。所以實做上這一行放在越前面越好。
不過話是這樣說,由於通常 jsp 會在 run time 被 compile 成 java bytecode,
也就是說只有在 .jsp 更新時才需要 recompile。overhead 實在有限。
Java 連結到 MySql 如何使用中文
Java 以 jdbc 連結到 databases server,MySql 有 Free 的
jdbc driver. 以下不擬說明如何使用 jdbc, 僅說明 |
|