[摘录]解决中文乱码问题

摘录地址: http://internet.blog.enorth.com.cn/article/5015.shtml

一、中文问题的来源  
    
计算机最初的操作系统支持的编码是单字节的字符编码,于是,在计算机中一切处理程序最初都是以单字节编码的英文为准进行处理。随着计算机的发展,为了适应世界其它民族的语言(当然包括我们的汉字),人们提出了 UNICODE 编码,它采用双字节编码,兼容英文字符和其它民族的双字节字符编码,所以,目前,大多数国际性的软件内部均采用 UNICODE 编码,在软件运行时,它获得本地支持系统(多数时间是操作系统)默认支持的编码格式,然后再将软件内部的 UNICODE 转化为本地系统默认支持的格式显示出来。 Java JDK JVM 即是如此,我这里说的 JDK 是指国际版的 JDK ,我们大多数程序员使用的是国际化的 JDK 版本,以下所有的 JDK 均指国际化的 JDK 版本。我们的汉字是双字节编码语言,为了能让计算机处理中文,我们自己制定的 gb2312 GBK GBK2K 等标准以适应计算机处理的需求。所以,大部分的操作系统为了适应我们处理中文的需求,均定制有中文操作系统,它们采用的是 GBK,GB2312 编码格式以正确显示我们的汉字。如:中文 Win2K 默认采用的是 GBK 编码显示,在中文 WIN2k 中保存文件时默认采用的保存文件的编码格式也是 GBK 的,即,所有在中文 WIN2K 中保存的文件它的内部编码默认均采用 GBK 编码,注意: GBK 是在 GB2312 基础上扩充来的。
     由于 Java 语言内部采用 UNICODE 编码,所以在 JAVA 程序运行时,就存在着一个从 UNICODE 编码和对应的操作系统及浏览器支持的编码格式转换输入、输出的问题,这个转换过程有着一系列的步骤,如果其中任何一步出错,则显示出来的汉字就会出是乱码,这就是我们常见的 JAVA 中文问题。
     同时, Java 是一个跨平台的编程语言,也即我们编写的程序不仅能在中文 windows 上运行,也能在中文 Linux 等系统上运行,同时也要求能在英文等系统上运行(我们经常看到有人把在中文 win2k 上编写的 JAVA 程序,移植到英文 Linux 上运行)。这种移植操作也会带来中文问题。
     还有,有人使用英文的操作系统和英文的 IE 等浏览器,来运行带中文字符的程序和浏览中文网页,它们本身就不支持中文,也会带来中文问题。
     有,几乎所有的浏览器默认在传递参数时都是以 UTF-8 编码格式来传递,而不是按中文编码传递,所以,传递中文参数时也会有问题,从而带来乱码现象。
     总之,以上几个方面是 JAVA 中的中文问题的主要来源,我们把以上原因造成的程序不能正确运行而产生的问题称作: JAVA 中文问题。
2 JAVA 编码转换的详细过程  
    
我们常见的 JAVA 程序包括以下类别:
     * 直接在 console 上运行的类 ( 包括可视化界面的类 )
     *JSP
代码类(注: JSP Servlets 类的变型)
     *Servelets
     *EJB
     * 其它不可以直接运行的支持类
     这些类文件中,都有可能含有中文字符串,并且我们常用前三类 JAVA 程序和用户直接交互,用于输出和输入字符,如:我们在 JSP Servlet 中得到客户端送来的字符,这些字符也包括中文字符。无论这些 JAVA 类的作用如何,这些 JAVA 程序的生命周期都是这样的:
    * 编程人员在一定的操作系统上选择一个合适的编辑软件来实现源程序代码并以 .java 扩展名保存在操作系统中,例如我们在中文 win2k 中用记事本编辑一个 java 源程序;
     * 编程人员用 JDK 中的 javac.exe 来编译这些源代码,形成 .class (JSP 文件是由容器调用 JDK 来编译的 )
     * 直接运行这些类或将这些类布署到 WEB 容器中去运行,并输出结果。
     那么,在这些过程中, JDK JVM 是如何将这些文件如何编码和解码并运行的呢?
     这里,我们以中文 win2k 操作系统为例说明 JAVA 类是如何来编码和被解码的。
     第一步,我们在中文 win2k 中用编辑软件如记事本编写一个 Java 源程序文件 ( 包括以上五类 JAVA 程序 ) ,程序文件在保存时默认采用了操作系统默认支持 GBK 编码格式 ( 操作系统默认支持的格式为 file.encoding 格式 ) 形成了一个 .java 文件,也即, java 程序在被编译前,我们的 JAVA 源程序文件是采用操作系统默认支持的 file.encoding 编码格式保存的, java 源程序中含有中文信息字符和英文程序代码;要查看系统的 file.encoding 参数,可以用以下代码:
public class ShowSystemDefaultEncoding {
public static void main(String[] args) {
String encoding = System.getProperty("file.encoding");
System.out.println(encoding);
}}
    
第二步,我们用 JDK javac.exe 文件编译我们的 Java 源程序,由于 JDK 是国际版的,在编译的时候,如果我们没有用 -encoding 参数指定我们的 JAVA 源程序的编码格式,则 javac.exe 首先获得我们操作系统默认采用的编码格式,也即在编译 java 程序时,若我们不指定源程序文件的编码格式, JDK 首先获得操作系统的 file.encoding 参数 ( 它保存的就是操作系统默认的编码格式,如 WIN2k ,它的值为 GBK) ,然后 JDK 就把我们的 java 源程序从 file.encoding 编码格式转化为 JAVA 内部默认的 UNICODE 格式放入内存中。然后, javac 把转换后的 unicode 格式的文件进行编译成 .class 类文件,此时 .class 文件是 UNICODE 编码的,它暂放在内存中,紧接着, JDK 将此以 UNICODE 编码的编译后的 class 文件保存到我们的操作系统中形成我们见到的 .class 文件。对我们来说,我们最终获得的 .class 文件是内容以 UNICODE 编码格式保存的类文件,它内部包含我们源程序中的中文字符串,只不过此时它己经由 file.encoding 格式转化为 UNICODE 格式了。
     这一步中,对于 JSP 源程序文件是不同的,对于 JSP ,这个过程是这样的:即 WEB 容器调用 JSP 编译器, JSP 编译器先查看 JSP 文件中是否设置有文件编码格式,如果 JSP 文件中没有设置 JSP 文件的编码格式,则 JSP 编译器调用 JDK 先把 JSP 文件用 JVM 默认的字符编码格式 ( 也即 WEB 容器所在的操作系统的默认的 file.encoding) 转化为临时的 Servlet 类,然后再把它编译成 UNICODE 格式的 class 类,并保存在临时文件夹中。如:在中文 win2k 上, WEB 容器就把 JSP 文件从 GBK 编码格式转化为 UNICODE 格式,然后编译成临时保存的 Servlet 类,以响应用户的请求。
     第三步,运行第二步编译出来的类,分为三种情况:
    A   直接在 console 上运行的类
    B  EJB 类和不可以直接运行的支持类 ( JavaBean )
    C
 JSP 代码和 Servlet
    D  JAVA 程序和数据库之间
     下面我们分这四种情况来看。
    A 、直接在 console 上运行的类
     这种情况,运行该类首先需要 JVM 支持,即操作系统中必须安装有 JRE 。运行过程是这样的:首先 java 启动 JVM ,此时 JVM 读出操作系统中保存的 class 文件并把内容读入内存中,此时内存中为 UNICODE 格式的 class 类,然后 JVM 运行它,如果此时此类需要接收用户输入,则类会默认用 file.encoding 编码格式对用户输入的串进行编码并转化为 unicode 保存入内存(用户可以设置输入流的编码格式)。程序运行后,产生的字符串( UNICODE 编码的)再回交给 JVM ,最后 JRE 把此字符串再转化为 file.encoding 格式 ( 用户可以设置输出流的编码格式 ) 传递给操作系统显示接口并输出到界面上。
     以上每一步的转化都需要正确的编码格式转化,才能最终不出现乱码现象。
    B EJB 类和不可以直接运行的支持类 ( JavaBean )
    
由于 EJB 类和不可以直接运行的支持类,它们一般不与用户直接交互输入和输出,它们常常与其它的类进行交互输入和输出,所以它们在第二步被编译后,就形成了内容是 UNICODE 编码的类保存在操作系统中了,以后只要它与其它的类之间的交互在参数传递过程中没有丢失,则它就会正确的运行。
    C JSP 代码和 Servlet
     经过第二步后, JSP 文件也被转化为 Servlets 类文件,只不过它不像标准的 Servlets 一校存在于 classes 目录中,它存在于 WEB 容器的临时目录中,故这一步中我们也把它做为 Servlets 来看。
     对于 Servlets ,客户端请求它时, WEB 容器调用它的 JVM 来运行 Servlet ,首先, JVM Servlet class 类从系统中读出并装入内存中,内存中是以 UNICODE 编码的 Servlet 类的代码,然后 JVM 在内存中运行该 Servlet 类,如果 Servlet 在运行的过程中,需要接受从客户端传来的字符如:表单输入的值和 URL 中传入的值,此时如果程序中没有设定接受参数时采用的编码格式,则 WEB 容器会默认采用 ISO-8859-1 编码格式来接受传入的值并在 JVM 中转化为 UNICODE 格式的保存在 WEB 容器的内存中。 Servlet 运行后生成输出,输出的字符串是 UNICODE 格式的,紧接着,容器将 Servlet 运行产生的 UNICODE 格式的串(如 html 语法,用户输出的串等)直接发送到客户端浏览器上并输出给用户,如果此时指定了发送时输出的编码格式,则按指定的编码格式输出到浏览器上,如果没有指定,则默认按 ISO-8859-1 编码发送到客户的浏览器上。
    D Java 程序和数据库之间
     对于几乎所有数据库的 JDBC 驱动程序,默认的在 JAVA 程序和数据库之间传递数据都是以 ISO-8859-1 为默认编码格式的,所以,我们的程序在向数据库内存储包含中文的数据时, JDBC 首先是把程序内部的 UNICODE 编码格式的数据转化为 ISO-8859-1 的格式,然后传递到数据库中,在数据库保存数据时,它默认即以 ISO-8859-1 保存,所以,这是为什么我们常常在数据库中读出的中文数据是乱码。
    3 、分析常见的 JAVA 中文问题几个必须清楚的原则
     首先,经过上面的详细分析,我们可以清晰地看到,任何 JAVA 程序的生命期中,其编码转换的关键过程是在于:最初编译成 class 文件的转码和最终向用户输出的转码过程。
     其次,我们必须了解 JAVA 在编译时支持的、常用的编码格式有以下几种:
    *ISO-8859-1 8-bit,  8859_1,ISO-8859-1,ISO_8859_1 等编码
    *Cp1252 ,美国英语编码,同 ANSI 标准编码
    *UTF-8 ,同 unicode 编码
    *GB2312 ,同 gb2312-80,gb2312-1980 等编码
    *GBK ,  MS936 ,它是 gb2312 的扩充
     及其它的编码,如韩文、日文、繁体中文等。同时,我们要注意这些编码间的兼容关体系如下:
    unicode UTF-8 编码是一一对应的关系。 GB2312 可以认为是 GBK 的子集,即 GBK 编码是在 gb2312 上扩展来的。同时, GBK 编码包含了 20902 个汉字,编码范围为: 0x8140-0xfefe ,所有的字符可以一一对应到 UNICODE2.0 中来。
     再次,对于放在操作系统中的 .java 源程序文件,在编译时,我们可以指定它内容的编码格式,具体来说用 -encoding 来指定。注意:如果源程序中含有中文字符,而你用 -encoding 指定为其它的编码字符,显然是要出错的。用 -encoding 指定源文件的编码方式为 GBK gb2312 ,无论我们在什么系统上编译含有中文字符的 JAVA 源程序都不会有问题,它都会正确地将中文转化为 UNICODE 存储在 class 文件中。
     然后,我们必须清楚,几乎所有的 WEB 容器在其内部默认的字符编码格式都是以 ISO-8859-1 为默认值的,同时,几乎所有的浏览器在传递参数时都是默认以 UTF-8 的方式来传递参数的。所以,虽然我们的 Java 源文件在出入口的地方指定了正确的编码方式,但其在容器内部运行时还是以 ISO-8859-1 来处理的。
4 、中文问题的分类及其建议最优解决办法
     了解以上 JAVA 处理文件的原理之后,我们就可以提出了一套建议最优的解决汉字问题的办法。
     我们的目标是:我们在中文系统中编辑的含有中文字符串或进行中文处理的 JAVA 源程序经编译后可以移值到任何其它的操作系统中正确运行,或拿到其它操作系统中编译后能正确运行,能正确地传递中文和英文参数,能正确地和数据库交流中英文字符串。
     我们的具体思路是:在 JAVA 程序转码的入口和出口及 JAVA 程序同用户有输入输出转换的地方限制编码方法使之正确即可。
     具体解决办法如下:
    1   针对直接在 console 上运行的类
     对于这种情况,我们建议在程序编写时,如果需要从用户端接收用户的可能含有中文的输入或含有中文的输出,程序中应该采用字符流来处理输入和输出,具体来说,应用以下面向字符型节点流类型:
     对文件: FileReader FileWrieter 
        
其字节型节点流类型为: FileInputStream FileOutputStream
    
对内存(数组): CharArrayReader CharArrayWriter
        
其字节型节点流类型为: ByteArrayInputStream ByteArrayOutputStream
    
对内存(字符串): StringReader StringWriter
    
对管道: PipedReader PipedWriter
        
其字节型节点流类型为: PipedInputStream PipedOutputStream
    
同时,应该用以下面向字符型处理流来处理输入和输出:
    BufferedWriter BufferedReader
        
其字节型的处理流为: BufferedInputeStream BufferedOutputStream
    InputStreamReader
OutputStreamWriter
    
其字节型的处理流为: DataInputStream DataOutputStream
    
其中 InputStreamReader InputStreamWriter 用于将字节流按照指定的字符编码集转换到字符流,如:
    InputStreamReader in = new InputStreamReader(System.in "GB2312")
    OutputStreamWriter out = new OutputStreamWriter (System.out "GB2312")
     例如:采用如下的示例 JAVA 编码就达到了要求:
//Read.java
import java.io.*;
public class Read {
public static void main(String[] args) throws IOException {
String str = "\n
中文测试,这是内部硬编码的串 "+"\ntest english character";
String strin= "";
BufferedReader stdin = new BufferedReader(new InputStreamReader(System.in,"gb2312")); //
设置输入接口按中文编码
BufferedWriter stdout = new BufferedWriter(new OutputStreamWriter(System.out,"gb2312")); // 设置输出接口按中文编码
stdout.write(" 请输入 :");
stdout.flush();
strin = stdin.readLine();
stdout.write("
这是从用户输入的串: "+strin);
stdout.write(str);
stdout.flush();
}}
    
同时,在编译程序时,我们用以下方式来进行:
    javac -encoding gb2312 Read.java
    2
  针对 EJB 类和不可以直接运行的支持类 ( JavaBean )
    
由于这种类它们本身被其它的类调用,不直接与用户交互,故对这种类来说,我们的建议的处理方式是内部程序中应该采用字符流来处理程序内部的中文字符串(具体如上面一节中一样),同时,在编译类时用 -encoding gb2312 参数指示源文件是中文格式编码的即可。
    3   针对 Servlet
     针对 Servlet ,我们建议用以下方法:
     在编译 Servlet 类的源程序时,用 -encoding 指定编码为 GBK GB2312 ,且在向用户输出时的编码部分用 response 对象的 setContentType("text/html;charset=GBK"); gb2312 来设置输出编码格式,同样在接收用户输入时,我们用 request.setCharacterEncoding("GB2312") ;这样无论我们的 servlet 类移植到什么操作系统中,只有客户端的浏览器支持中文显示,就可以正确显示。如下是一个正确的示例:
//HelloWorld.java
package hello;
import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;
public class HelloWorld extends HttpServlet
{
public void init() throws ServletException { }
public void doGet(HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException
{
request.setCharacterEncoding("GB2312"); //
设置输入编码格式
response.setContentType("text/html;charset=GB2312"); // 设置输出编码格式
PrintWriter out = response.getWriter(); // 建议使用 PrintWriter 输出
out.println("<hr>");
out.println("Hello World! This is created by Servlet!
测试中文 !");
out.println("<hr>");
}
public void doPost(HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException
{
request.setCharacterEncoding("GB2312"); //
设置输入编码格式
response.setContentType("text/html;charset=GB2312"); // 设置输出编码格式
String name = request.getParameter("name");
String id = request.getParameter("id");
if(name==null) name="";
if(id==null) id="";
PrintWriter out = response.getWriter(); //
建议使用 PrintWriter 输出
out.println("<hr>");
out.println("
你传入的中文字串是: " + name);
out.println("<hr>
你输入的 id 是: " + id);
out.println("<hr>");
}
public void destroy() { }
}
    
请用 javac -encoding gb2312 HelloWorld.java 来编译此程序。
     测试此 Servlet 的程序如下所示:
<%@page contentType="text/html; charset=gb2312"%>
<%request.setCharacterEncoding("GB2312");%>
<html><head><title></title>
<Script language="JavaScript">
function Submit() {
//
通过 URL 传递中文字符串值给 Servlet
document.base.action = "./HelloWorld?name=
中文 ";
document.base.method = "POST";
document.base.submit();
}
</Script>
</head>
<body bgcolor="#FFFFFF" text="#000000" topmargin="5">
<form name="base" method = "POST" target="_self">
<input name="id" type="text" value="" size="30">
<a href = "JavaScript:Submit()">
传给 Servlet</a>
</form></body></html>
    4
 JAVA 程序和数据库之间
     为避免 JAVA 程序和数据库之间数据传递出现乱码现象,我们建议采用以下最优方法来处理:
    1   对于 JAVA 程序的处理方法按我们指定的方法处理。
    2   把数据库默认支持的编码格式改为 GBK GB2312 的。
     如:在 mysql 中,我们可以在配置文件 my.ini 中加入以下语句实现:
     [mysqld] 区增加:
    default-character-set=gbk
    
并增加:
    [client]
    default-character-set=gbk
    
SQL Server2K 中,我们可以将数据库默认的语言设置为 Simplified Chinese 来达到目的。
    5   针对 JSP 代码
     由于 JSP 是在运行时,由 WEB 容器进行动态编译的,如果我们没有指定 JSP 源文件的编码格式,则 JSP 编译器会获得服务器操作系统的 file.encoding 值来对 JSP 文件编译的,它在移植时最容易出问题,如在中文 win2k 中可以很好运行的 jsp 文件拿到英文 linux 中就不行,尽管客户端都是一样的,那是因为容器在编译 JSP 文件时获取的操作系统的编码不同造成的(在中文 wink 中的 file.encoding 和在英文 Linux file.encoding 是不同的,且英文 Linux file.encoding 对中文不支持,所以编译出来的 JSP 类就会有问题)。网络上讨论的大多数是此类问题,多是因为 JSP 文件移植平台时不能正确显示的问题,对于这类问题,我们了解了 JAVA 中程序编码转换的原理,解决起来就容易多了。我们建议的解决办法如下:
    1 、我们要保证 JSP 向客户端输出时是采用中文编码方式输出的,即无论如何我们首先在我们的 JSP 源代编中加入以下一行:
    <%@page contentType="text/html; charset=gb2312"%>
    2
、为了让 JSP 能正确获得传入的参数,我们在 JSP 源文件头加入下面一句:
    <%request.setCharacterEncoding("GB2312");%>
    3
、为了让 JSP 编译器能正确地解码我们的含有中文字符的 JSP 文件,我们需要在 JSP 源文件中指定我们的 JSP 源文件的编码格式,具体来说,我们在 JSP 源文件头上加入下面的一句即可:
    <%@page pageEncoding="GB2312"%> <%@page pageEncoding="GBK"%>
    
这是 JSP 规范 2.0 新增加的指令。
     我们建议使用此方法来解 JSP 文件中的中文问题,下面的代码是一个正确做法的 JSP 文件的测试程序:
//testchinese.jsp
<%@page pageEncoding="GB2312"%>
<%@page contentType="text/html; charset=gb2312"%>
<%request.setCharacterEncoding("GB2312");%>
<%
String action = request.getParameter("ACTION");
String name = "";
String str = "";
if(action!=null && action.equals("SENT"))
{
name = request.getParameter("name");
str = request.getParameter("str");
}
%>
<html>
<head>
<title></title>
<Script language="JavaScript">
function Submit()
{
document.base.action = "?ACTION=SENT&str=
传入的中文 ";
document.base.method = "POST";
document.base.submit();
}
</Script>
</head>
<body bgcolor="#FFFFFF" text="#000000" topmargin="5">
<form name="base" method = "POST" target="_self">
<input type="text" name="name" value="" size="30">
<a href = "JavaScript:Submit()">
提交 </a>
</form>
<%
if(action!=null && action.equals("SENT"))
{
out.println("<br>
你输入的字符为: "+name);
out.println("<br>
你通过 URL 传入的字符为: "+str);
}
%>
</body>
</html>

由于大多数本地测试环境是 TOMCAT ,现也将其中文问题一并附上。
Tomcat 中文问题 - -
  
tomcat5 中发现了以前处理 tomcat4 的方法不能适用于处理直接通过 url 提交的请求,上网找资料终于发现了最完美的解决办法,不用每个地方都转换了,而且无论 get, post 都正常。写了个文档,贴出来希望跟我有同样问题的人不再像我一样痛苦一次 :-)
问题描述:
表单提交的数据,用 request.getParameter(“xxx”) 返回的字符串为乱码或者??
直接通过 url http://localhost/a.jsp?name= 中国,这样的 get 请求在服务端用 request. getParameter(“name”) 时返回的是乱码;按 tomcat4 的做法设置 Filter 也没有用或者用 request.setCharacterEncoding("GBK"); 也不管用
原因:
1 tomcat j2ee 实现对表单提交即 post 方式提示时处理参数采用缺省的 iso-8859-1 来处理
2 tomcat get 方式提交的请求对 query-string  处理时采用了和 post 方法不一样的处理方式。 ( tomcat4 不一样 , 所以设置 setCharacterEncoding(“gbk”)) 不起作用。
解决办法:
首先所有的 jsp 文件都加上 :
实现一个 Filter. 设置处理字符集为 GBK ( tomcat webapps/servlet-examples 目录有一个完整的例子。请参考 web.xml SetCharacterEncodingFilter 的配置。

1)
只要把 %TOMCAT 安装目录 %/ webapps\servlets-examples\WEB-INF\classes\filters\SetCharacterEncodingFilter.class 文件拷到你的 webapp 目录 /filters 下,如果没有 filters 目录,就创建一个。
2) 在你的 web.xml 里加入如下几行:  <filter>
<filter-name>Set Character Encoding</filter-name>
<filter-class>filters.SetCharacterEncodingFilter</filter-class>
<init-param>
<param-name>encoding</param-name>
<param-value>GBK</param-value>
</init-param>
</filter>
  <filter-mapping>
<filter-name>Set Character Encoding</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
3)
完成 .
2 get
方式的解决办法
1)  打开 tomcat server.xml 文件,找到区块,加入如下一行:
URIEncoding=”GBK”
完整的应如下:
<Connector 
port="80" maxThreads="150" minSpareThreads="25" maxSpareThreads="75"
enableLookups="false" redirectPort="8443" acceptCount="100"
debug="0" connectionTimeout="20000" 
disableUploadTimeout="true" 
URIEncoding="GBK"
/>
2)
重启 tomcat, 一切 OK
执行如下 jsp 页页测试是否成功
<%@ page contentType="text/html;charset=gb2312"%>
<%@ page import="java.util.*"%>
<% 
  String q=request.getParameter("q"); 
q = q == null? "
没有值 " : q;
%>
<HTML>
<HEAD><TITLE>
新闻列表显示 </TITLE>
<META http-equiv=Content-Type content="text/html; charset=gb2312">
<META http-equiv=pragma content=no-cache>
<body>
你提交了:
<%=q%>
<br>
<form action="tcnchar.jsp" method="post">
输入中文 :<input type="text" name="q"><input type="submit" value=" 确定 ">
<br>
<a href="tcnchar.jsp?q=
中国 "> 通过 get 方式提交 </a>
</form>
</BODY></HTML>
测试结果如果你输入文本框或者点超链都会显示 : 你提交了 中国 ”, 说明成功 !!!!!





欢迎大家访问我的个人网站 萌萌的IT人

posted on 2006-04-19 18:26 见酒就晕 阅读(652) 评论(1)  编辑  收藏 所属分类: HTML

评论

# re: [摘录]解决中文乱码问题 2006-12-11 22:20 西域空间

谢谢你 看了你的文章后 数据库的乱码解决了
遗憾的是这么好的文件 没有能力吸收完啊
有空加我的QQ指教指教啊 641075753  回复  更多评论   


只有注册用户登录后才能发表评论。


网站导航:
 
<2006年12月>
262728293012
3456789
10111213141516
17181920212223
24252627282930
31123456

导航

统计

常用链接

留言簿(3)

我参与的团队

随笔分类

随笔档案

文章分类

文章档案

收藏夹

BLOG

FRIENDS

LIFE

搜索

最新评论

阅读排行榜

评论排行榜