2008年9月

VMware中虚拟机接入互联网的个人总结

最近在VMware中装了个Red Hat Linux虚拟机,也算过了一把Linux瘾,感觉很不错嘛!

之前玩Windows的虚拟机,网络设置比较轻车熟路,按照VMware中的网络模型很轻松就设置好了,因为Windows里设置网络连接的方法很熟悉,在Linux中可着实累了一把!Linux的窗口操作一时感觉有些别扭,难以正确找到,但是玩多了感觉Linux确实很有意思^_^

好了,不说了,直接进入正题!以下主要是我的个人总结,欢迎朋友们指正!^_^

这里不包含理论方面的东西,我只是总结经验,等学习了VMware中的联网模型,再说原理吧!

◎◎在桥接模式里,虚拟机和真实机器一样,具有相互平等的网络层次。

你可以像本机一样为虚拟机申请一个IP,然后设置给它,这样虚拟机就可以上网了

我们学校是申请IP上网的,每个人的IP是固定的!

我把其他有效的IP(来源,盗的,用完归还,呵呵)设置到虚拟机里,这样虚拟机就可以上网了!完全和真实计算机 一样

◎◎在NAT模式里,虚拟机和真实计算机组成局域网!

这时的网络连接情况是,真实计算机和虚拟机组成局域网,真实计算机挂接互联网!这就和处理组建局域网的方法是一样的!

我这里使用的是共享上网的办法!

1.在本机设置好申请到的IP,并将链接设置为共享
1.jpeg

2.jpeg

2.把本机里的用于NAT模式的VM虚拟网络连接的IP和虚拟机里的本地连接设置为同一IP段

比如:192.168.0.*

如果开启了VM的DHCP动态分配,则不用自己设置了!
3.jpeg

设置完之后,由于真实机的本地连接处于共享模式,这样真实机里用于NAT模式的VM虚拟网络连接可以通过真实机的本地连接上网,虚拟机也就可以通过真实机作为跳转,上网了!

这里指示我的经验总结!如有错误,欢迎大家讨论!

(转)JSP中文问题解决方案(完整)

由于Java编程中的中文问题是一个老生常谈的问题,在阅读了许多关于Java中文问题解决方法之后,结合作者的编程实践,我发现过去谈的许多方法都不能清晰地说明问题及解决问题,尤其是跨平台时的中文问题。于是我给出此篇文章,内容包括对控制台运行的class、Servelets、JSP及EJB类中的中文问题我剖析和建议解决办法。希望大家指教。

Abstract:本文深入分析了Java程序设计中Java编译器对Java源文件和JVM对class类文件的编码/解码过程,通过此过程的解析透视出了Java编程中中文问题产生的根本原因,最后给出了建议的最优化的解决Java中文问题的方法。

1、中文问题的来源
计算机最初的操作系统支持的编码是单字节的字符编码,于是,在计算机中一切处理程序最初都是以单字节编码的英文为准进行处理。

随着计算机的发展,为了适应世界其它民族的语言(当然包括我们的汉字),人们提出了UNICODE编码,它采用双字节编码,兼容英文字符和其它民族的双字节字符编码,所以,目前,大多数国际性的软件内部均采用UNICODE编码,在软件运行时,它获得本地支持系统(多数时间是操作系统)默认支持的编码格式,然后再将软件内部的UNICODE转化为本地系统默认支持的格式显示出来。

Java的JDK和JVM即是如此,我这里说的JDK是指国际版的JDK,我们大多数程序员使用的是国际化的JDK版本,以下所有的JDK均指国际化的JDK版本。我们的汉字是双字节编码语言,为了能让计算机处理中文,我们自己制定的gb2312、GBK、GBK2K等标准以适应计算机处理的需求。

所以,大部分的操作系统为了适应我们处理中文的需求,均定制有中文操作系统,它们采用的是GBK,GB2312编码格式以正确显示我们的汉字。如:中文Windows默认采用的是GBK编码显示,在中文 Windows2000中保存文件时默认采用的保存文件的编码格式也是GBK的,即所有在中文Windows2000中保存的文件它的内部编码默认均采用 GBK编码,注意:GBK是在GB2312基础上扩充来的。

由于Java语言内部采用UNICODE编码,所以在Java程序运行时,就存在着一个从UNICODE编码和对应的操作系统及浏览器支持的编码格式转换输入、输出的问题,这个转换过程有着一系列的步骤,如果其中任何一步出错,则显示出来的汉字就会出是乱码,这就是我们常见的Java中文问题。

同时,Java是一个跨平台的编程语言,也即我们编写的程序不仅能在中文windows上运行,也能在中文Linux等系统上运行,同时也要求能在英文等系统上运行(我们经常看到有人把在中文Windows2000上编写的 Java程序,移植到英文Linux上运行)。这种移植操作也会带来中文问题。

还有,有人使用英文的操作系统和英文的IE等浏览器,来运行带中文字符的程序和浏览中文网页,它们本身就不支持中文,也会带来中文问题。

几乎所有的浏览器默认在传递参数时都是以UTF-8编码格式来传递,而不是按中文编码传递,所以,传递中文参数时也会有问题,从而带来乱码现象。

总之,以上几个方面是Java中的中文问题的主要来源,我们把以上原因造成的程序不能正确运行而产生的问题称作:Java中文问题。

2、Java编码转换的详细过程
我们常见的Java程序包括以下类别:
*直接在console上运行的类(包括可视化界面的类)
*JSP代码类(注:JSP是Servlets类的变型)
*Servelets类
*EJB类
*其它不可以直接运行的支持类

这些类文件中,都有可能含有中文字符串,并且我们常用前三类Java程序和用户直接交互,用于输出和输入字符,如:我们在JSP和Servlet中得到客户端送来的字符,这些字符也包括中文字符。无论这些Java类的作用如何,这些Java程序的生命周期都是这样的:

*编程人员在一定的操作系统上选择一个合适的编辑软件来实现源程序代码并以.Java扩展名保存在操作系统中,例如我们在中文Windows2000中用记事本编辑一个Java源程序。

*编程人员用JDK中的Javac.exe来编译这些源代码,形成.class类(JSP文件是由容器调用JDK来编译的)。

*直接运行这些类或将这些类布署到WEB容器中去运行,并输出结果。

那么,在这些过程中,JDK和JVM是如何将这些文件如何编码和解码并运行的呢?这里,我们以中文Windows2000操作系统为例说明Java类是如何来编码和被解码的。

第一步,我们在中文Windows2000中用编辑软件如记事本编写一个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参数(它保存的就是操作系统默认的编码格式,如Windows2000,它的值为 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类,并保存在临时文件夹中。

如:在中文Windows2000上,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个汉字,编码范围为:0×8140-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文件编译的,它在移植时最容易出问题,如在中文Windows2000中可以很好运行的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(“tr”);
}
%>
<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>

中文字库常见编码简介

  所谓编码,是以固定的顺序排列字符,并以此做为记录、存贮、传递、交换的统一内部特征,这个字符排列顺序被称为“编码”。

  字库的编码是字库组织的依据,也是文字处理的基础。不同国家和地区有不同的编码标准,和中文字库有关的常见编码有:单字节编码、GB2312-80、 GB12345-90、GBK、Unicode编码、ISO10646 / Unicode字符集、GB18030-2000、BIG5编码、方正748编码,下面简要介绍一下:

■ 单字节编码

MS Windows:Windows Latin 1(ANSI)

MS-DOS:MS-DOS Latin

acintosh:Macintosh Roman

■ GB2312-80

全称是GB2312-80《信息交换用汉字编码字符集基本集》,1980年发布,是中文信息处理的国家标准,在大陆及海外使用简体中文的地区(如新加坡等)是强制使用的唯一中文编码。P-Windows3.2和苹果OS就是以GB2312为基本汉字编码, Windows 95/98则以GBK为基本汉字编码、但兼容支持GB2312。

双字节编码

范围:A1~FEFE

A1-A9:符号区,包含682个符号

B0-F7:汉字区,包含6763个汉字

GB码共收录6763个简体汉字、682个符号,其中汉字部分:一级字3755,以拼音排序,二级字3008,以偏旁排序。该标准的制定和应用为规范、推动中文信息化进程起了很大作用。

■ GB12345-90

1990年制定了繁体字的编码标准GB12345-90《信息交换用汉字编码字符集第一辅助集》,目的在于规范必须使用繁体字的各种场合,以及古籍整理等。该标准共收录6866个汉字(比GB2312多103个字,其它厂商的字库大多不包括这些字),纯繁体的字大概有2200余个。

双字节编码

范围:A1~FEFE

A1-A9:符号区,增加竖排符号

B0-F9:汉字区,包含6866个汉字

■ Unicode编码(Universal Multiple Octet Coded Character Set)

国际标准组织于1984年4月成立ISO/IEC JTC1/SC2/WG2工作组,针对各国文字、符号进行统一性编码。1991年美国跨国公司成立Unicode Consortium,并于1991年10月与WG2达成协议,采用同一编码字集。目前Unicode是采用16位编码体系,其字符集内容与 ISO10646的BMP(Basic Multilingual Plane)相同。Unicode于1992年6月通过DIS(Draf International Standard),目前版本V2.0于1996公布,内容包含符号6811个,汉字20902个,韩文拼音11172个,造字区6400个,保留 20249个,共计65534个。

■ ISO10646 / Unicode字符集

全球可以共享的编码字符集。

UCS-4:组八位 平面八位 行八位 字位八位

UCS-2:00组中的00平面是基本多文种平面(BMP),4E00~9FFF 中日韩文字

Ext A(CJK):3400~4DB7,共6584字

Ext B(CJK):42,807个汉字,在第2平面的0100~A836

■ GBK编码(Chinese Internal Code Specification)

GBK编码是中国大陆制订的、等同于UCS的新的中文编码扩展国家标准。GBK工作小组于1995年10月,同年12月完成GBK规范。该编码标准兼容GB2312,共收录汉字21003个、符号883个,并提供1894个造字码位,简、繁体字融于一库。Windows95/98简体中文版的字库表层编码就采用的是GBK,通过GBK与UCS之间一一对应的码表与底层字库联系。

英文名:Chinese Internal Code Specification

中文名:汉字内码扩展规范1.0版

双字节编码,GB2312-80的扩充,在码位上和GB2312-80兼容

范围:8140~FEFE(剔除xx)共23940个码位

包含21003个汉字,包含了ISO/IEC 10646-1中的全部中日韩汉字

■ GB18030-2000

英文名:Chinese Internal Code Specification

中文名:信息技术 信息交换用汉字编码字符集

基本集的扩充( 发布和实施)

单字节、双字节、四字节编码

向下与国家标准GB 2312信息处理交换码所对应的事实上的内码标准兼容。

在字汇上支持GB 13000.1的全部中、日、韩(CJK)统一汉字字符和全部CJK统一汉字扩充A的字符。

■ BIG5编码

是目前台湾、香港地区普遍使用的一种繁体汉字的编码标准,包括440个符号,一级汉字5401个、二级汉字7652个,共计13060个汉字。

■ 方正748编码

所谓748编码,是指方正系统在长期应用过程中实施、制定的简、繁体字库编码方式,简体兼容GB2312且有所扩展,共7156字;繁体兼容 GB12345并扩展全部BIG-5汉字,计14943字。此外,方正748编码还含有丰富的符号库。748编码仅用于方正软件和系统。