短信发送接收时的UCS2编码转换处理

其实UCS2这种编码不像GB2312、UTF-8等,它并不属于任何语系的语言编码,实际上是一种编码格式的世界语。在这个世界上所有可以在计算机中使用的语言都有对应的UCS2编码。
正是因为Java采用了UCS2,因此,在Java中可以使用世界上任何国家的语言来为变量名、方法名、类起名,如下面代码如下:

public class 中国
{
    public String 雄起()
    {
         return "中国雄起";
    }
}
中国 祖国 = new 中国();
System.out.println(祖国.雄起());

实际上,也可以使用其他的语言来编程,如下面用韩文和日文来定义个类:

class 수퍼맨
{
    public void スーパーマン() { ... }
}
由于Java内部使用的是UCS2编码格式,因为,Java并不关心所使用的是哪种语言,而只要这种语言在UCS2中有定义就可以。
在UCS2编码中为不同国家的语言进行了分页,这个分页也叫“代码页”或“编码页”。中文根据包含中文字符的多少,分了很多代码页,如cp935、cp936等,然而,这些都是在UCS2中的代码页名,而对于操作系统来说,如微软的windows,一开始的中文编码为GB2312,后来扩展成了GBK。其实GBK和cp936是完全等效的,用它们哪个都行。 

=华丽丽的分隔符===
上面都是废话了,这里关键想说的是,怎么从UCS2转为GBK?以及怎么从GBK转为UCS2?
网上有人提供了个方法:

 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 RuntimeException(e);
  }
  return reValue;
 }

但这个并不好使,其实你拿到UCS2字节数组时(首先肯定是字节数组,编码都不确定,谁会去给它转成String?),直接:

 String reValue = new String(bytes, "UTF-16BE");

就行了。
至于把中文转成UCS2,则可以用:

content.getBytes("UnicodeBigUnmarked")
  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

陈振阳

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值