分享

- 好山,好水,好人家——邓鹏的bolg

 accesine 2005-08-25

最近一段时间,因为正在研究全文检索,所以遇到了很多问题。首先就是怎样对文章进行差别处理,这种差别在中文中尤其明显,例如:标点,数字、字母的全半角问题等。

我在网上查找了一些关于全半角转换的代码,但可惜只有C#(因为整个系统需要考虑移植的问题,所以计划用JAVA实现),不过,有总比没有好,仔细研究了一下算法,感觉用JAVA实现也很简单,所以就产生今天这篇文档,希望可以为今后的工作提供参考。

进入主题>>

1、首先,需要知道的是中文编码的种类,有:GB2312 、GBK、Unicode、UTF8、BIG5等。现在大多数的应用软件都采用Unicode编码,在JAVA的内部也是如此。所以关于上述问题,只需要对字符的Unicode编码进行一个相应的处理就可以解决。

2、下面说明一下Unicode编码,该编码采用双字节编码方式,对所有字符,都采用2个字节编码,即4byte,这点很重要,我们只需要对这4byte进行处理就可以完成相应字符的转换了。另外在Unicode编码中,标点、数字、字母的编码与汉字的编码在最高位会有明显区别。有兴趣可以参看Unicode 编码表

3、关于全角转半角的问题,在Unicode中,标点、数字、字母的半角编码最高位均为0,它们的全角编码与半角编码的第三位相差32h。

根据上面的结论,实现的全角转半角的JAVA代码如下,至于半角转全角,加变减就成了:

public class change {
    
    public static void main(String[] args) {
    
     String QJstr="hello!! 全角转换,DAO";
     
     String result=SBCchange(QJstr);
    
     System.out.println(QJstr+"\n"+result);
  
 }
 
 
 public static final String SBCchange(String QJstr)
 {
     String outStr="";
     String Tstr="";
     byte[] b=null;

     for(int i=0;i<QJstr.length();i++)
     {     
      try
      {
       Tstr=QJstr.substring(i,i+1);
       b=Tstr.getBytes("unicode");
      }
      catch(java.io.UnsupportedEncodingException e)
      {
       e.printStackTrace();
      }     
   
      if (b[3]==-1)
      {
       b[2]=(byte)(b[2]+32);
       b[3]=0;      
        
       try
       {       
        outStr=outStr+new String(b,"unicode");
       }
       catch(java.io.UnsupportedEncodingException e)
       {
        e.printStackTrace();
       }      
      }else outStr=outStr+Tstr;
     }
    
     return outStr; 
  }

 }
原帖来自于网易社

另外感觉C#与JAVA在字符处理方面的差别比较大,不知道是不是我的理解有问题,改天得好好看看。

至于其它编码,以后有时间再想吧,脑子有点疼了。。。

相关链接:

           C#里面全角和半角的自由转换 av

           Unicode 编码表

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多