字符串与unicode的相互转换

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();

}

相关推荐