⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 繁简体(gb=big5)字符串转化的java方式实现 zeal blog - 泽欧里的网络日志.htm

📁 使用java算法实现繁体中文和简体中文的转化
💻 HTM
📖 第 1 页 / 共 5 页
字号:
        pWriter.write(b_big5Table,0,b_big5Table.length);
        pWriter.close();
    }

    /** 把gb2312编码的字符串转化成big5码的字节流 */
    public byte[] gb2big5(String inStr) throws Exception{
        if(null == inStr || inStr.length() <= 0){
            return "".getBytes();
            //return "";
        }

        byte[] Text = 
            new String(inStr.getBytes(),"GBK").getBytes("GBK");
        int max = Text.length - 1;
        int h = 0;
        int l = 0;
        int p = 0;
        int b = 256;
        byte[] big = new byte[2];
        for(int i = 0; i < max; i++){
            h = (int) (Text[i]);
            if(h < 0){
                h = b + h;
                l = (int) (Text[i + 1]);
                if(l < 0){
                    l = b + (int) (Text[i + 1]);
                }
                if(h == 161 && l == 64){
                    big[0] = big[1] = (byte) (161 - b);
                }
                else{
                    p = (h - 160) * 510 + (l - 1) * 2;
                    try{
                        big[0] = (byte) (b_gbTable[p] - b);
                    }
                    catch(Exception e){
                        big[0] = 45;
                    }
                    try{
                        big[1] = (byte) (b_gbTable[p + 1] - b);
                    }
                    catch(Exception e){
                        big[1] = 45;
                    }
                }
                Text[i] = big[0];
                Text[i + 1] = big[1];
                i++;
            }

        }

        return Text;
        //return new String(Text);
    }

    /** 把big5码的字符串转化成gb2312码的字符串 */
    public String big52gb(String inStr) throws Exception{
        if(null == inStr || inStr.length() <= 0){
            return "";
        }

        byte[] Text = 
            new String(inStr.getBytes(),"BIG5").getBytes("BIG5");
        int max = Text.length - 1;
        int h = 0;
        int l = 0;
        int p = 0;
        int b = 256;
        byte[] big = new byte[2];
        for(int i = 0; i < max; i++){
            h = (int) (Text[i]);
            if(h < 0){
                h = b + h;
                l = (int) (Text[i + 1]);
                if(l < 0){
                    l = b + (int) (Text[i + 1]);
                }
                if(h == 161 && l == 161){
                    big[0] = (byte) (161 - b);
                    big[1] = (byte) (64 - b);
                }
                else{
                    p = (h - 160) * 510 + (l - 1) * 2;
                    try{
                        big[0] = (byte) (b_big5Table[p] - b);
                    }
                    catch(Exception e){
                        big[0] = 45;
                    }
                    try{
                        big[1] = (byte) (b_big5Table[p + 1] - b);
                    }
                    catch(Exception e){
                        big[1] = 45;
                    }
                }
                Text[i] = big[0];
                Text[i + 1] = big[1];
                i++;
            }

        }

        return new String(Text);
    }

    /** 把文件读入字节数组,读取失败则返回null */
    private static byte[] getBytesFromFile(String inFileName){
        try{
            InputStream in = 
                GB2Big5.class.getResourceAsStream(inFileName);
            byte[] sContent = StreamConverter.toByteArray(in);
            in.close();
            return sContent;

            /*
             java.io.RandomAccessFile inStream = 
             new java.io.RandomAccessFile(inFileName,"r");
             byte[] sContent = new byte[ (int) (inStream.length())];
                         inStream.read(sContent);
                         inStream.close();
                         return sContent;
             */
        }
        catch(Exception e){
            e.printStackTrace();
            return null;
        }
    }

    public static void main(String[] args) throws Exception{
        if(args.length < 2){
            System.out.println(
            "Usage: zeal.util.GB2Big5 [-gb | -big5] inputstring");
            System.exit(1);
            return;
        }

        boolean bIsGB = true;
        String inStr = "";
        for(int i = 0; i < args.length; i++){
            if(args[i].equalsIgnoreCase("-gb")){
                bIsGB = true;
            }
            else if(args[i].equalsIgnoreCase("-big5")){
                bIsGB = false;
            }
            else{
                inStr = args[i];
            }
        }

        GB2Big5 pTmp = GB2Big5.getInstance();

        String outStr = "";
        if(bIsGB){
            outStr = pTmp.big52gb(inStr);
        }
        else{
            outStr = new String(pTmp.gb2big5(inStr),"BIG5");
        }

        System.out.println("String [" + inStr + 
                           "] converted into:\n[" + outStr + "]");
    }
}
</TEXTAREA>
<SCRIPT language=javascript 
src="繁简体(GB=Big5)字符串转化的JAVA方式实现  Zeal Blog - 泽欧里的网络日志.files/shBrushJava.js"></SCRIPT>
 </P>
<P>##############################<BR>直接调用GB2Big5只适用于对于少量字符的转化,当需要对整个jsp页面根据用户需要进行编码转化<BR>的时候,就需要使用到taglib的功能。<BR>具体配置使用步骤如下:</P>
<P>1.在WEB-INF/目录下增加GB2Big5Wrapper.tld文件,内容如下: <TEXTAREA class=xml name=dp_sourcecode rows=20 cols=60>&lt;?xml version="1.0" encoding="ISO-8859-1"?&gt;
&lt;!DOCTYPE taglib
   PUBLIC "-//Sun Microsystems, Inc.//DTD JSP Tag Library 1.2//EN"
          "http://java.sun.om/dtd/web-jsptaglibrary_1_2.dtd"&gt;

&lt;taglib&gt;
   &lt;tlib-version&gt;1.0&lt;/tlib-version&gt;
   &lt;jsp-version&gt;1.2&lt;/jsp-version&gt;
   &lt;short-name&gt;zealLi&lt;/short-name&gt;
   &lt;tag&gt;
     &lt;name&gt;GB2Big5Wrapper&lt;/name&gt;
     &lt;tag-class&gt;zeal.util.GB2Big5Wrapper&lt;/tag-class&gt;
     &lt;attribute&gt;
       &lt;name&gt;isbig5&lt;/name&gt; 
       &lt;rtexprvalue&gt;true&lt;/rtexprvalue&gt;
       &lt;type&gt;boolean&lt;/type&gt;
     &lt;/attribute&gt;
   &lt;/tag&gt;
&lt;/taglib&gt;
</TEXTAREA>
<SCRIPT language=javascript 
src="繁简体(GB=Big5)字符串转化的JAVA方式实现  Zeal Blog - 泽欧里的网络日志.files/shBrushXml.js"></SCRIPT>
 </P>
<P>2.在需要进行转化的JSP页面里面加上:<BR>&lt;%@ taglib uri="/WEB-INF/GB2Big5Wrapper.tld" 
prefix="zealLi"%&gt;<BR>&lt;zealLi:GB2Big5Wrapper 
isbig5="true"&gt;<BR>任何你需要转化的东西<BR>&lt;/zealLi:GB2Big5Wrapper&gt;</P>
<P>比如test.jsp源代码如下 =&gt; <TEXTAREA class=xml name=dp_sourcecode rows=20 cols=60>&lt;%@ page
contentType="text/html; charset=GBK"

import="javax.servlet.http.HttpSession"
import="java.util.*"
import="com.zealLi.*"
%&gt;&lt;%
String encode = request.getParameter("encode");

if(null == encode || encode.length() &lt;= 0){
  encode = "BIG5";
}
boolean isBig5 = false;
String charset = "GB2312";

if(encode.equalsIgnoreCase("BIG5")){
  isBig5 = true;
  charset = "BIG5";
}
String sInfo = "中文字体繁简体转化的测试。";
%&gt;&lt;%@ taglib uri="/WEB-INF/GB2Big5Wrapper.tld" prefix="zealLi"%&gt;
&lt;zealLi:GB2Big5Wrapper isbig5="&lt;%= isBig5 %&gt;"&gt;
&lt;html&gt;
  &lt;head&gt;
    &lt;title&gt;Jsp测试页面&lt;/title&gt;
    &lt;meta http-equiv="Content-Type" content="text/html; charset=&lt;%=charset%&gt;"&gt;
  &lt;/head&gt;
  &lt;body&gt;
    &lt;%
    Calendar now = Calendar.getInstance();
    out.println(now.get(Calendar.YEAR) + "." + 
    (now.get(Calendar.MONTH)+1) + "." + 
    now.get(Calendar.DAY_OF_MONTH) + "&lt;p&gt;");
    %&gt;
    &lt;p&gt;
    &lt;%=sInfo%&gt;
  &lt;/body&gt;
&lt;/html&gt;&lt;/zealLi:GB2Big5Wrapper&gt;</TEXTAREA> </P>
<P>附件 GB2Big5.zip(108,182 bytes): <A class=download title=发布形式的类库zip文件,可直接使用 
href="http://down.zeali.net/GB2Big5.zip"><IMG class=icon 
style="BORDER-TOP-WIDTH: 0px; BORDER-LEFT-WIDTH: 0px; BORDER-BOTTOM-WIDTH: 0px; BORDER-RIGHT-WIDTH: 0px" 
height=16 alt=发布形式的类库zip文件,可直接使用 
src="繁简体(GB=Big5)字符串转化的JAVA方式实现  Zeal Blog - 泽欧里的网络日志.files/icon_zip.gif" 
width=16> 发布形式的类库zip文件,可直接使用</A></P>
<P>附件 GB2Big5_Project.zip(38,685 bytes): <A class=download 
title=JBuilder工程文件,提供完整的源代码 
href="http://down.zeali.net/GB2Big5_Project.zip"><IMG class=icon 
style="BORDER-TOP-WIDTH: 0px; BORDER-LEFT-WIDTH: 0px; BORDER-BOTTOM-WIDTH: 0px; BORDER-RIGHT-WIDTH: 0px" 
height=16 alt=JBuilder工程文件,提供完整的源代码 
src="繁简体(GB=Big5)字符串转化的JAVA方式实现  Zeal Blog - 泽欧里的网络日志.files/icon_zip.gif" 
width=16> JBuilder工程文件,提供完整的源代码</A>
<SCRIPT 
language=javascript>dp.SyntaxHighlighter.HighlightAll("dp_sourcecode");</SCRIPT>
</P>
<P>相关日志: <A title=PHP下中文编码各种格式间的转换类 href="http://www.zeali.net/entry/55" 
target=_blank alt="PHP下中文编码各种格式间的转换类">PHP下中文编码各种格式间的转换类</A> , <A 
title=中文字符编码格式判断 href="http://www.zeali.net/entry/444" target=_blank 
alt="中文字符编码格式判断">中文字符编码格式判断</A></P></DIV>
<DIV>
<DIV id=entryReferrerInfo>
<SCRIPT language=javascript 
src="繁简体(GB=Big5)字符串转化的JAVA方式实现  Zeal Blog - 泽欧里的网络日志.files/referrer.htm" 
type=text/javascript></SCRIPT>
</DIV>
<DIV id=entryLastModify>This Entry was Last Modified on 2007-05-24 16:30 
</DIV></DIV>

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -