📄 繁简体(gb=big5)字符串转化的java方式实现 zeal blog - 泽欧里的网络日志.htm
字号:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3c.org/TR/1999/REC-html401-19991224/loose.dtd">
<!-- saved from url=(0029)http://www.zeali.net/entry/19 -->
<HTML lang=zh-CN xml:lang="zh-CN"
xmlns="http://www.w3.org/1999/xhtml"><HEAD><TITLE>繁简体(GB<=>Big5)字符串转化的JAVA方式实现 | Zeal Blog - 泽欧里的网络日志</TITLE><!--Last Generated by Zeal 's let on 2008-05-08 13:53:34,Thursday-->
<META http-equiv=Content-Type content="text/html; charset=UTF-8">
<META content="繁简体(GB<=>Big5)字符串转化的JAVA方式实现, encoding, 字符编码, 源代码"
name=description>
<META content="encoding, 字符编码, 源代码" name=keywords><LINK title="RSS 2.0"
href="http://www.zeali.net/feed/rss" type=application/rss+xml
rel=alternate><LINK title=Atom href="http://www.zeali.net/feed/atom"
type=application/atom+xml rel=alternate><LINK
href="繁简体(GB=Big5)字符串转化的JAVA方式实现 Zeal Blog - 泽欧里的网络日志.files/zeal.css"
type=text/css rel=stylesheet><!-- hashcash_head -->
<META content="MSHTML 6.00.2900.3314" name=GENERATOR></HEAD>
<BODY>
<DIV id=mainpageholder>
<DIV id=TopHeader>
<SCRIPT language=JavaScript
src="繁简体(GB=Big5)字符串转化的JAVA方式实现 Zeal Blog - 泽欧里的网络日志.files/j.1.2.js"
type=text/javascript></SCRIPT>
<SCRIPT language=JavaScript
src="繁简体(GB=Big5)字符串转化的JAVA方式实现 Zeal Blog - 泽欧里的网络日志.files/j.dimensions.js"
type=text/javascript></SCRIPT>
<SCRIPT language=JavaScript
src="繁简体(GB=Big5)字符串转化的JAVA方式实现 Zeal Blog - 泽欧里的网络日志.files/zeal_head.js"
type=text/javascript></SCRIPT>
<DIV
style="PADDING-RIGHT: 5px; PADDING-LEFT: 5px; FLOAT: left; PADDING-BOTTOM: 0px; WIDTH: 500px; PADDING-TOP: 0px; HEIGHT: 50px; TEXT-ALIGN: left">
<DIV style="FLOAT: left; WIDTH: 310px; PADDING-TOP: 10px">
<DIV style="FLOAT: left; WIDTH: 180px; HEIGHT: 24px"><A class=blogtitle
href="http://www.zeali.net/">Zeal Blog - <SPAN
class=blogtitlecn>泽欧里</SPAN></A></DIV>
<DIV id=feedListPopOut style="FLOAT: right; WIDTH: 130px; HEIGHT: 24px"><A
title="点击此处订阅我的日志Feed (RSS 2.0)" href="http://www.zeali.net/feed/rss">
<DIV style="WIDTH: 130px; CURSOR: pointer; HEIGHT: 24px">
<DIV style="FLOAT: left; WIDTH: 24px"><IMG height=24 alt=rss-icon
src="繁简体(GB=Big5)字符串转化的JAVA方式实现 Zeal Blog - 泽欧里的网络日志.files/rssfeed-icon.gif"
width=24 border=0></DIV>
<DIV
style="FONT-WEIGHT: bold; FLOAT: right; WIDTH: 106px; COLOR: #ec8132"> 订阅我的日志</DIV></DIV></A></DIV></DIV>
<DIV
style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; FLOAT: right; PADDING-BOTTOM: 0px; WIDTH: 190px; LINE-HEIGHT: 140%; PADDING-TOP: 6px">
<SCRIPT language=JavaScript>
try{
var sMail_first = 'ma';
var sMail_second = 'il';
var sMail_third = 'to:';
var sMail_address_ZealLi = 'ZealLi';
var sMail_domain_gmail = 'gmail.com';
var sMail_gmsn = '<span style="color:#000000;letter-spacing:0px;">My <a href="'+sMail_first+sMail_second+sMail_third+sMail_address_ZealLi+'@'+sMail_domain_gmail+'" title="给我发邮件"><span style="font-weight:bold; color:#000000;">Email</span></'+'a> & <a href="gtalk:chat?jid='+sMail_address_ZealLi+'@'+sMail_domain_gmail+'" title="用 GTalk 联系我"><span style="font-weight:bold; color:#000000;">Gtalk</span></'+'a> & <a href="msnim:chat?contact='+sMail_address_ZealLi+'@'+sMail_domain_gmail+'" title="通过MSN Messenger联系我"><span style="font-weight:bold; color:#000000;">MSN</span></'+'a> = </span><div title="我的GTalk+Email+MSN" style="font-family:Courier New,Verdana,Arial Black;font-size:14px;color:#EC8132;font-weight:bold;letter-spacing:2px;">'+sMail_address_ZealLi+'@'+sMail_domain_gmail+'</div>';
document.write(sMail_gmsn);
}
catch(e){}
</SCRIPT>
</DIV></DIV>
<DIV
style="PADDING-RIGHT: 5px; PADDING-LEFT: 5px; FLOAT: right; PADDING-BOTTOM: 0px; WIDTH: 480px; PADDING-TOP: 0px; HEIGHT: 45px; TEXT-ALIGN: right">
<DIV
style="FLOAT: left; WIDTH: 340px; MARGIN-RIGHT: 20px; PADDING-TOP: 12px; TEXT-ALIGN: right">
<FORM style="MARGIN: 0px" action=/blog/googlesearch.php method=get
target=_top><INPUT type=hidden value=www.zeali.net name=domains></INPUT> <INPUT
type=hidden value=pub-9342903690278134 name=client></INPUT> <INPUT type=hidden
value=1 name=forid></INPUT> <INPUT type=hidden value=9141720331
name=channel></INPUT> <INPUT type=hidden value=UTF-8 name=ie></INPUT> <INPUT
type=hidden value=UTF-8 name=oe></INPUT> <INPUT type=hidden
value=GALT:50D098;GL:1;DIV:#FFFFFF;VLC:4388D2;AH:center;BGC:FFFFFF;LBGC:ffffff;ALC:0065D2;LC:0065D2;T:68686A;GFNT:689CD2;GIMP:4488D2;FORID:11
name=cof></INPUT> <INPUT type=hidden value=zh_CN name=hl></INPUT>
<DIV><INPUT style="WIDTH: 154px" maxLength=255 size=18 name=q> <INPUT style="WIDTH: 40px" type=submit value=搜索 name=sa> <INPUT
style="BORDER-TOP-WIDTH: 0px; BORDER-LEFT-WIDTH: 0px; BORDER-BOTTOM-WIDTH: 0px; BORDER-RIGHT-WIDTH: 0px"
type=radio value="" name=sitesearch>WWW <INPUT
style="BORDER-TOP-WIDTH: 0px; BORDER-LEFT-WIDTH: 0px; BORDER-BOTTOM-WIDTH: 0px; BORDER-RIGHT-WIDTH: 0px"
type=radio CHECKED value=www.zeali.net name=sitesearch>Zeal Blog
</DIV></FORM></DIV>
<DIV
style="FLOAT: right; WIDTH: 120px; LINE-HEIGHT: 140%; PADDING-TOP: 8px; TEXT-ALIGN: right">梦想
就像鸡蛋<BR>要么孵化 要么臭掉</DIV></DIV></DIV>
<DIV id=TopTailer></DIV>
<DIV id=container>
<DIV id=leftcolumn>
<DIV id=navBar>
<DIV id=navPrevious><A
href="http://www.zeali.net/entry/18">姚明背后运球过人大力扣篮</A> « 上一篇</DIV>
<DIV id=navNext>下一篇 » <A
href="http://www.zeali.net/entry/20">足球/NBA赛事节目电视转播时间表</A></DIV></DIV>
<DIV class=entryContent>
<H2><A class="entrytitlelist snap_nopreview"
title="繁简体(GB<=>Big5)字符串转化的JAVA方式实现" href="http://www.zeali.net/entry/19"
rel=bookmark>繁简体(GB<=>Big5)字符串转化的JAVA方式实现</A></H2>
<DIV class=modcontent>
<DIV class=date_entry>zeal 2005-04-28 10:32 于 JAVA/C++ , 12901 字 | <A
title="对此贴 '献鲜花'"
href="javascript:voteWin('good','19','weblog_zeal','k_')">+</A> 0 <A
title="对此贴 '扔鸡蛋'" href="javascript:voteWin('bad','19','weblog_zeal','k_')">-</A>
1 <A class=snap_nopreview
title="Translate this aritcle into English Version"
href="http://translate.google.com/translate?u=http%3A%2F%2Fwww.zeali.net%2Fblog%2Fentry.php%3Fid%3D19&langpair=zh-CN%7Cen&hl=zh-CN&newwindow=1&ie=UTF-8&oe=UTF-8&prev=%2Flanguage_tools"
target=_blank>English</A></DIV>
<DIV id=entryCopyright><STRONG><FONT color=black>Made In Zeal
转载请保留原始链接:</FONT></STRONG><A
href="http://www.zeali.net/entry/19">http://www.zeali.net/entry/19</A></DIV>
<DIV id=entryTagsLine>标签 ( Tags ): <A title="Tag: encoding"
href="http://www.zeali.net/tag/encoding" rel=tag>encoding</A> , <A
title="Tag: 字符编码" href="http://www.zeali.net/tag/å­ç¬¦ç¼ç "
rel=tag>字符编码</A> , <A title="Tag: 源代码"
href="http://www.zeali.net/tag/æºä»£ç " rel=tag>源代码</A></DIV>
<DIV id=entry_introduce>
<DIV class=entry_introduce>本文提供一个java实现中文字符繁简体互换的zip包以及主要的源代码实现说明。</DIV></DIV>
<DIV id=entryBody>
<P>繁简体(GB<=>Big5)中文字符的转化实现原理很简单,就是根据两种码表的编码规则,创建两者之间的字符对应关系表,通过程序读取这个映射表来自动查出另一种编码方式下对应字符的字节编码,从而进行逐字节的内容替换。 </P>
<P>主功能实现的GB2Big5.java源代码如下:<LINK
href="繁简体(GB=Big5)字符串转化的JAVA方式实现 Zeal Blog - 泽欧里的网络日志.files/SyntaxHighlighter.css"
type=text/css rel=stylesheet></LINK>
<SCRIPT language=javascript
src="繁简体(GB=Big5)字符串转化的JAVA方式实现 Zeal Blog - 泽欧里的网络日志.files/shCore.js"></SCRIPT>
<TEXTAREA class=java name=dp_sourcecode rows=20 cols=60>package zeal.util;
import java.io.*;
/**
* 用来处理GB2312/BIG5码字符互相转换的类.
* 需要两个码表文件:
* /zeal/util/gb-big5.table,/zeal/util/big5-gb.table.
* 这两个码表可以根据具体情况补充映射不正确的码.
* <p>Title: GB<=>Big5</p>
* <p>Description: Deal with the convertion
* between gb2312 and big5 charset Strings.</p>
* <p>Copyright: Copyright (c) 2004</p>
* <p>Company: zeali.net</p>
* @author Zeal Li
* @version 1.0
*
* @see zeal.util.StreamConverter
*/
public class GB2Big5{
private static GB2Big5 pInstance = null;
private String s_big5TableFile = null;
private String s_gbTableFile = null;
private byte[] b_big5Table = null;
private byte[] b_gbTable = null;
/** 指定两个码表文件来进行初始化 */
private GB2Big5(String sgbTableFile,String sbig5TableFile)
throws NullPointerException{
s_big5TableFile = sbig5TableFile;
s_gbTableFile = sgbTableFile;
if(null == b_gbTable){
b_gbTable = getBytesFromFile(sgbTableFile);
}
if(null == b_big5Table){
b_big5Table = getBytesFromFile(sbig5TableFile);
}
if(null == b_gbTable){
throw
new NullPointerException("No gb table can be load");
}
if(null == b_big5Table){
throw
new NullPointerException("No big5 table can be load");
}
}
public static synchronized GB2Big5 getInstance(){
//return getInstance("d:\\gb-big5.table","d:\\big5-gb.table");
return getInstance("/zeal/util/gb-big5.table",
"/zeal/util/big5-gb.table");
}
public static synchronized GB2Big5 getInstance(String sgbTableFile,
String sbig5TableFile){
if(null == pInstance){
try{
pInstance = new GB2Big5(sgbTableFile,sbig5TableFile);
}
catch(Exception e){
System.err.println(e.toString());
pInstance = null;
}
}
return pInstance;
}
/** 把gbChar对应的big5字符替换掉,用来更新码表文件.
* 一般当发现字符映射不正确的时候可以通过这个方法来校正. */
protected synchronized void resetBig5Char(String gbChar,String big5Char)
throws Exception{
byte[] Text = new String(gbChar.getBytes(),"GBK").getBytes("GBK");
byte[] TextBig5 = new String(big5Char.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 == 64){
; // do nothing
}
else{
p = (h - 160) * 510 + (l - 1) * 2;
b_gbTable[p] = TextBig5[i];
b_gbTable[p + 1] = TextBig5[i + 1];
}
i++;
}
}
BufferedOutputStream pWriter =
new BufferedOutputStream(new FileOutputStream(s_gbTableFile));
pWriter.write(b_gbTable,0,b_gbTable.length);
pWriter.close();
}
/** 把big5Char对应的gb字符替换掉,用来更新码表文件.
* 一般当发现字符映射不正确的时候可以通过这个方法来校正. */
protected synchronized void resetGbChar(String big5Char,String gbChar)
throws Exception{
byte[] TextGb =
new String(gbChar.getBytes(),"GBK").getBytes("GBK");
byte[] Text =
new String(big5Char.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 == 64){
; // do nothing
}
else{
p = (h - 160) * 510 + (l - 1) * 2;
b_big5Table[p] = TextGb[i];
b_big5Table[p + 1] = TextGb[i + 1];
}
i++;
}
}
BufferedOutputStream pWriter =
new BufferedOutputStream(new FileOutputStream(s_big5TableFile));
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -