ahansban 2008-05-30
字符串与unicode的相互转换
unicode编码简而言之就是将每一个字符用16位2进制数标识。但是通常都用4位的16进制数标识。
例如:
1)中文字符串"你好"的unicode码为:\u4f60\u597d;
2)英文字符串"ab"的unicode码为:\u0061\u0062;
其中\u是标识unicode码用的,后面的4位16进制数则是对应字符的unicode码。
unicode码在J2EE项目中应用广泛,java对unicode码提供了很好的支持。例如国际化,则是unicode的经典运用。
那么unicode的编码规则具体是什么,如何用程序实现?
1、unicode编码规则
unicode码对每一个字符用4位16进制数表示。具体规则是:将一个字符(char)的高8位与低8位分别取出,转化为16进制数,
如果转化的16进制数的长度不足2位,则在其后补0,然后将高、低8位转成的16进制字符串拼接起来并在前面补上"\u"即可。
2、转码程序
1)字符串转unicode
/**
*将字符串转成unicode
*@paramstr待转字符串
*@returnunicode字符串
*/
publicStringconvert(Stringstr)
{
str=(str==null?"":str);
Stringtmp;
StringBuffersb=newStringBuffer(1000);
charc;
inti,j;
sb.setLength(0);
for(i=0;i<str.length();i++)
{
c=str.charAt(i);
sb.append("\\u");
j=(c>>>;//取出高8位
tmp=Integer.toHexString(j);
if(tmp.length()==1)
sb.append("0");
sb.append(tmp);
j=(c&0xFF);//取出低8位
tmp=Integer.toHexString(j);
if(tmp.length()==1)
sb.append("0");
sb.append(tmp);
}
return(newString(sb));
}
2)unicode转成字符串,与上述过程反向操作即可
/**
*将unicode字符串
*@paramstr待转字符串
*@return普通字符串
*/
publicStringrevert(Stringstr)
{
str=(str==null?"":str);
if(str.indexOf("\\u")==-1)//如果不是unicode码则原样返回
returnstr;
StringBuffersb=newStringBuffer(1000);
for(inti=0;i<str.length()-6;)
{
StringstrTemp=str.substring(i,i+6);
Stringvalue=strTemp.substring(2);
intc=0;
for(intj=0;j<value.length();j++)
{
chartempChar=value.charAt(j);
intt=0;
switch(tempChar)
{
case'a':
t=10;
break;
case'b':
t=11;
break;
case'c':
t=12;
break;
case'd':
t=13;
break;
case'e':
t=14;
break;
case'f':
t=15;
break;
default:
t=tempChar-48;
break;
}
c+=t*((int)Math.pow(16,(value.length()-j-1)));
}
sb.append((char)c);
i=i+6;
}
returnsb.toString();
}