解决全角半角问题

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;
}

}
原帖来自于网易社

你可能感兴趣的:(问题)