📄 繁简体(gb=big5)字符串转化的java方式实现 zeal blog - 泽欧里的网络日志.htm
字号:
*/<BR>#define isgb2312head(c) (0xa1<=(uchar)(c) &&
(uchar)(c)<=0xf7)<BR>#define isgb2312tail(c) (0xa1<=(uchar)(c) &&
(uchar)(c)<=0xfe)<BR><BR>/* Support for Chinese(GBK) characters */<BR>#define
isgbkhead(c) (0x81<=(uchar)(c) && (uchar)(c)<=0xfe)<BR>#define
isgbktail(c) ((0x40<=(uchar)(c) && (uchar)(c)<=0x7e) ||
(0x80<=(uchar)(c) && (uchar)(c)<=0xfe))</DIV>
<DIV>- <B>sailbefore</B> (
<SCRIPT type=text/javascript>
<!--
var first = 'ma';
var second = 'il';
var third = 'to:';
var address = 'yuhang617';
var domain = 'gmail.com';
document.write('<a href="');
document.write(first+second+third);
document.write(address);
document.write('@');
document.write(domain);
document.write('" title="email sailbefore">');
document.write('email<\/a>');
// -->
</SCRIPT>
) 于 2006-10-10 17:41</DIV>
<DIV class=commCont>zeal 您好,谢谢您给我们提供了这么好的文章,上面那个PHP的判断能帮用Java写一下吗,谢谢!</DIV>
<DIV>- <B>zeal</B> (<A title=www.zeali.net/ href="http://www.zeali.net/"
target=_blank>link</A>) 于 2006-10-12 00:57</DIV>
<DIV class=commCont>中文字符编码格式判断: <A href="http://www.zeali.net/entry/444"
target=_blank>http://www.zeali.net/entry/444</A> , check it out.</DIV>
<DIV>- <B>sailbefore</B> 于 2006-10-23 11:13</DIV>
<DIV
class=commCont>Zeal老兄,自从我用您写的MyTest这个类把简体字转成繁体字后觉得很过瘾,所以想把繁体字转成简体字可以打入-gb参数后出现的是一堆问号,这是为什么啊,我记得刚下载下来的时候我好像成功转过一次...</DIV>
<DIV>- <B>sailbefore</B> 于 2006-10-23 11:23</DIV>
<DIV class=commCont>这是我测反回的结果<BR>String [中國] converted into:<BR>[ ??]</DIV>
<DIV>- <B>zeal</B> (<A title=www.zeali.net/ href="http://www.zeali.net/"
target=_blank>link</A>) 于 2006-10-23 15:05</DIV>
<DIV
class=commCont>因为这个转换只是gb和big5编码之间的转换。你输入的中國两个字其实应该算是gbk编码而不是big5。你需要传入big5编码的繁体字才会被正确转换。</DIV>
<DIV>- <B>simba</B> (
<SCRIPT type=text/javascript>
<!--
var first = 'ma';
var second = 'il';
var third = 'to:';
var address = 'simba.zhang';
var domain = 'tom.com';
document.write('<a href="');
document.write(first+second+third);
document.write(address);
document.write('@');
document.write(domain);
document.write('" title="email simba">');
document.write('email<\/a>');
// -->
</SCRIPT>
) (<A title=hi.baidu.com/lifethink href="http://hi.baidu.com/lifethink"
target=_blank>link</A>) 于 2006-11-06 16:55</DIV>
<DIV
class=commCont>我的系統是基於utf8編碼的,數據庫中的也是utf8格式數據,用這個程序好像找不到對應字,請問如何解決?<BR>多謝zeal
!</DIV>
<DIV>- <B>zeal</B> (<A title=www.zeali.net/ href="http://www.zeali.net/"
target=_blank>link</A>) 于 2006-11-06 17:00</DIV>
<DIV class=commCont>请参考本篇日志最后提供的关于"
PHP下中文编码各种格式间的转换类"的链接.在那篇日志里面有处理utf8格式字符的转换代码,当然是用php来实现的,你可以根据提供的码表去实现对应的java版本。</DIV>
<DIV>- <B>alex</B> 于 2006-12-15 14:20</DIV>
<DIV class=commCont>有一个字 (後)转不过来,请问怎么解决?(谢谢你提供的代码)</DIV>
<DIV>- <B>zeal</B> (<A title=www.zeali.net/ href="http://www.zeali.net/"
target=_blank>link</A>) 于 2006-12-15 14:56</DIV>
<DIV class=commCont>因为字符对应码表都是手工进行对应的,如果发现有的字符转码不正确或找不到的话,可以使用类里面提供的两个方法
resetBig5Char / resetGbChar 来把正确的对应关系重新写入码表。</DIV>
<DIV>- <B>tinen</B> (
<SCRIPT type=text/javascript>
<!--
var first = 'ma';
var second = 'il';
var third = 'to:';
var address = 'voodoo99';
var domain = 'citiz.net';
document.write('<a href="');
document.write(first+second+third);
document.write(address);
document.write('@');
document.write(domain);
document.write('" title="email tinen">');
document.write('email<\/a>');
// -->
</SCRIPT>
) 于 2007-01-16 14:06</DIV>
<DIV
class=commCont>谢谢zeal。请问,但是GB->BIG5似乎不对?BIG5在简体系统中应该显示乱码,中国两个字转换为big5不应该是い瓣吗?而您的程序转换出的是中國。这两字在繁体系统中仍旧是乱码呀!?<BR>PS:不好意思,本人脑袋不太好使,经常会转不过弯,希望您提点下!谢谢=v=</DIV>
<DIV>- <B>zeal</B> (<A title=www.zeali.net/ href="http://www.zeali.net/"
target=_blank>link</A>) 于 2007-01-16 16:06</DIV>
<DIV class=commCont>这是测试代码为了显示出来便于观察,在显示的时候又通过java getBytes 把 big5 的字符串转化成 统一的
java unicode 之后再显示了出来。你在实际使用的时候直接把字节数组写入文件或输出,不要再进行转化就可以了。</DIV>
<DIV>- <B>tinen</B> (
<SCRIPT type=text/javascript>
<!--
var first = 'ma';
var second = 'il';
var third = 'to:';
var address = 'voodoo99';
var domain = 'citiz.net';
document.write('<a href="');
document.write(first+second+third);
document.write(address);
document.write('@');
document.write(domain);
document.write('" title="email tinen">');
document.write('email<\/a>');
// -->
</SCRIPT>
) 于 2007-01-16 22:19</DIV>
<DIV class=commCont>原来如此!!非常感谢您的详解=v=。受教了。</DIV>
<DIV>- <B>snowtank</B> (
<SCRIPT type=text/javascript>
<!--
var first = 'ma';
var second = 'il';
var third = 'to:';
var address = 'snowtank';
var domain = '126.com';
document.write('<a href="');
document.write(first+second+third);
document.write(address);
document.write('@');
document.write(domain);
document.write('" title="email snowtank">');
document.write('email<\/a>');
// -->
</SCRIPT>
) (<A title=bbs.365hd.com href="http://bbs.365hd.com/" target=_blank>link</A>) 于
2007-01-18 09:24</DIV>
<DIV class=commCont>Zeal我刚刚测试了一下,gb2big5是可以的,但是big52gb确转换不正确<BR>代码如下<BR>String
str5 = new
String(GB2Big5.getInstance().big52gb("天天互動"),"GBK");<BR>System.out.println(str5);<BR>请赐教,谢谢</DIV>
<DIV>- <B>zeal</B> (<A title=www.zeali.net/ href="http://www.zeali.net/"
target=_blank>link</A>) 于 2007-01-18 09:40</DIV>
<DIV class=commCont>和上面 tinen 说的是同一个问题,“天天互動”其实已经不是 big5 的字符而是 unicode
的了。你在使用big52gb的时候需要提供的是类似 い瓣 这样看不懂的 big5 码字符。</DIV>
<DIV>- <B>snowtank</B> (
<SCRIPT type=text/javascript>
<!--
var first = 'ma';
var second = 'il';
var third = 'to:';
var address = 'snowtank';
var domain = '126.com';
document.write('<a href="');
document.write(first+second+third);
document.write(address);
document.write('@');
document.write(domain);
document.write('" title="email snowtank">');
document.write('email<\/a>');
// -->
</SCRIPT>
) 于 2007-01-18 16:56</DIV>
<DIV class=commCont>谢谢,我是想把天天互動转换为天天互动,是哪里有错误呢?</DIV>
<DIV>- <B>zeal</B> (<A title=www.zeali.net/ href="http://www.zeali.net/"
target=_blank>link</A>) 于 2007-01-18 17:40</DIV>
<DIV class=commCont>天天互动 对应的big5码是 ぱぱが笆 ,而不是 天天互動 ,这样说不知道你是否能够理解了。你可以使用我在本文末尾提到的
中文字符编码格式判断 ( <A href="http://www.zeali.net/entry/444"
target=_blank>http://www.zeali.net/entry/444</A> ) 一文了解更多关于字符编码的问题。如果你需要的是 GBK
中的繁体转换到 GBK/GB2312 简体的话,需要相应的码表来完成字符对应的工作。</DIV>
<DIV>- <B>tinen</B> (
<SCRIPT type=text/javascript>
<!--
var first = 'ma';
var second = 'il';
var third = 'to:';
var address = 'voodoo99';
var domain = 'citiz.net';
document.write('<a href="');
document.write(first+second+third);
document.write(address);
document.write('@');
document.write(domain);
document.write('" title="email tinen">');
document.write('email<\/a>');
// -->
</SCRIPT>
) 于 2007-01-19 11:12</DIV>
<DIV class=commCont>zeal,请问如果要把简体的unicode同繁体的unicode互相转换该怎么做呢?</DIV>
<DIV>- <B>tinen</B> (
<SCRIPT type=text/javascript>
<!--
var first = 'ma';
var second = 'il';
var third = 'to:';
var address = 'voodoo99';
var domain = 'citiz.net';
document.write('<a href="');
document.write(first+second+third);
document.write(address);
document.write('@');
document.write(domain);
document.write('" title="email tinen">');
document.write('email<\/a>');
// -->
</SCRIPT>
) 于 2007-01-22 17:49</DIV>
<DIV class=commCont>zeal,你好,我在繁体的系统中尝试运行你的程序,但是输出全都是?号,这是什么原因?两个table的问题吗?</DIV>
<DIV>- <B>smoke</B> 于 2007-07-20 11:23</DIV>
<DIV
class=commCont>zeal老大,我用你的方法能把big5=>gbk,但我想不管用户输入繁体big5或简体gbk,都能自动转为简体gbk,或者能自动识别用户输入繁体或简体。怎么办?</DIV>
<DIV>- <B>zeal</B> (<A title=www.zeali.net/ href="http://www.zeali.net/"
target=_blank>link</A>) <SUP>verified</SUP> 于 2007-07-20 11:59</DIV>
<DIV class=commCont>请参见楼上的一些回复。</DIV>
<DIV>- <B>smoke</B> 于 2007-07-20 12:45</DIV>
<DIV class=commCont>zeal老大,我利用你的转码方法,做了个函数,可以识别用户输入是繁体或简体。终于搞定这个麻烦的东东!谢谢你!</DIV>
<DIV>- <B>zzz</B> 于 2007-08-09 14:16</DIV>
<DIV class=commCont>雜誌的“誌”转换后乱码</DIV>
<DIV>- <B>yakie</B> 于 2007-10-19 10:46</DIV>
<DIV
class=commCont>楼主的代码我试过了,有两个地方有问题,需要改一下<BR>1,用到GBK的地方,我需要改成GB2312才能工作。<BR>2,所有str.getBytes()方法,都没有传参数进去,这样会导致默认用系统的encoding,如此以来,如public
byte[] gb2big5(String
inStr)这个方法,如果在繁体系统下,会导致错误的转换,解决办法是,在此方法里面用str.getBytes("GB2312")来代替。其他str.getBytes()的方法也要指定相应的encoding,这样才能做到平台无关。</DIV>
<DIV>- <B>yakie</B> 于 2007-10-19 10:48</DIV>
<DIV class=commCont>tinen (email) 于 2007-01-22
17:49<BR>zeal,你好,我在繁体的系统中尝试运行你的程序,但是输出全都是?号,这是什么原因?两个table的问题吗?<BR><BR>我的这个方法可以解决你的问题</DIV>
<DIV>- <B>oldyoungj</B> 于 2007-11-29 17:45</DIV>
<DIV class=commCont>GBK内简繁互转是怎么解决的?麻烦告知</DIV>
<DIV>- <B>squall</B> 于 2008-01-16 14:07</DIV>
<DIV class=commCont>雜誌的“誌” 和 檬面的"檬"字
转不了<BR><BR>试过用resetGbChar()和resetBig5Char()方法好像没有效果</DIV>
<DIV>- <B>squall</B> 于 2008-01-18 15:41</DIV>
<DIV
class=commCont>原来是可以用resetGbChar()和resetBig5Char()来更新码表的<BR><BR>之前是用误用了,所以结果好像没有效<BR><BR>PS:如果想这个程序在繁体操作系统时生效的话最好指定一下编码<BR><BR>PS:帮到大忙了,太感谢zeal</DIV>
<DIV>- <B>squall</B> 于 2008-01-18 16:17</DIV>
<DIV
class=commCont>好像是错觉,有调用reset方法时才有效,还以为它已经写入文件了<BR><BR>(看过文件的日期与当前日期是一致的啊,理论上有进行过写入操作)<BR><BR>,没有调用时还是没效,难道每次都要调用一下reset方法来更新字符??</DIV>
<DIV>- <B>zeal</B> (<A title=www.zeali.net/ href="http://www.zeali.net/"
target=_blank>link</A>) <SUP>verified</SUP> 于 2008-01-18 17:11</DIV>
<DIV
class=commCont>如果你用的是zip包的话,需要自己把包解开之后运行reset写入码表之后在把新生成的table文件打包回去。</DIV></DIV>
<SCRIPT language=Javascript>
function entry_comment_ctlent(e){if(isKeyTrigger(e,13,true)){onPostSubmit();}}
var quizNotifyRepeat=0;
function notifyAnswerQuiz(){
if(quizNotifyRepeat >= 14) return;
quizNotifyRepeat++;
var pLayer = $('#antiSpamQuizSpan');
var pInput = $('#formCommSub').find('input[@name="pblanswer"]');
pLayer.css({background:'',color:''});
pInput.css('background','');
if(quizNotifyRepeat%2) {
pLayer.css({background:'#EC8132',color:'#FFFFFF'});
pInput.css('background','#EC8132');
}
pLayer = null;pInput = null;
setTimeout(notifyAnswerQuiz,300);
}
function onPostSubmit(){
var argv = onPostSubmit.arguments;
var argc = onPostSubmit.arguments.length;
var dosubmit = true;
if(argc > 0){
dosubmit = argv[0];
}
var formname = document.formCommSub;
if(dosubmit && formname.pblanswer.value.length <= 0){
alert("请先回答页面上的简单算术题以证明您不是机器人:-P");
formname.pblanswer.focus();
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -