from: http://www.blogjava.net/cmzy/archive/2009/01/06/250102.html
最近,做一个关于SMS的程序,需要对中文部分进行UCS编码,这里用了两个函数,可以将短信中的UCS2字符串在UCS2和GBK之间装换。记录以下代 码:
- /**
- * UCS2解码
- *
- * @param src
- * UCS2 源串
- * @return 解码后的UTF-16BE字符串
- */
- public static String DecodeUCS2(String src) {
- byte [] bytes = new byte [src.length() / 2 ];
- for ( int i = 0 ; i < src.length(); i += 2 ) {
- bytes[i / 2 ] = ( byte ) (Integer
- .parseInt(src.substring(i, i + 2 ), 16 ));
- }
- String reValue;
- try {
- reValue = new String(bytes, "UTF-16BE" );
- } catch (UnsupportedEncodingException e) {
- throw new PduDecodeException(e);
- }
- return reValue;
- }
- /**
- * UCS2编码
- *
- * @param src
- * UTF-16BE编码的源串
- * @return 编码后的UCS2串
- */
- public static String EncodeUCS2(String src) {
- byte [] bytes;
- try {
- bytes = src.getBytes("UTF-16BE" );
- } catch (UnsupportedEncodingException e) {
- throw new PduEncodeException(e);
- }
- StringBuffer reValue = new StringBuffer();
- StringBuffer tem = new StringBuffer();
- for ( int i = 0 ; i < bytes.length; i++) {
- tem.delete(0 , tem.length());
- tem.append(Integer.toHexString(bytes[i] & 0xFF ));
- if (tem.length()== 1 ){
- tem.insert(0 , ' 0 ');
- }
- reValue.append(tem);
- }
- return reValue.toString().toUpperCase();
- }
By:残梦追月