posts - 0,  comments - 3,  trackbacks - 0
对汉字的unicode编码有问题,下面先看看通过代码是如何解决的.
/*
* UnicodeTest.java
*
* Created on July 29, 2003, 12:59 PM
*/

/**
 *
 * @author abc
 * @version
 */

public class UnicodeTest
{

  public static void main(String args[])
  {
   UnicodeTest UT = new UnicodeTest();
   UT.test1();
  }

  public void test1()
  {
   String str = "测试信息abc123";
   try
   {
     byte[] b = str.getBytes("GBK");
     System.out.println(str + " -(GBK)编码: " + bytesToHexStr(b));
     System.out.println("");

     str = new String(b, "GBK");
     System.out.println("从GBK编码 " + bytesToHexStr(b) + " 重新转换为字串: " + str);
     System.out.println("");

     b = str.getBytes("UnicodeBigUnmarked");
     System.out.println(str + " -(UCS2)编码: " + bytesToHexStr(b));
     System.out.println("");

     str = new String(b, "UnicodeBigUnmarked");
     System.out.println("从(UCS2)编码 " + bytesToHexStr(b) + " 重新转换为字串: " + str);
     System.out.println("");

     b = str.getBytes("ASCII");
     System.out.println(str + " -(ASCII)编码: " + bytesToHexStr(b));
     System.out.println("");
   }
   catch(Exception e){}
  }

  private String bytesToHexStr(byte[] b)
  {
   if (b == null) return "";
   StringBuffer strBuffer = new StringBuffer(b.length * 3);
   for(int i = 0; i < b.length; i++)
   {
     strBuffer.append(Integer.toHexString(b & 0xff));
    
strBuffer.append(" ");
   }
   return strBuffer.toString();
  }

}

运行此小程序的输出结果是:


测试信息abc123 -(GBK)编码: b2 e2 ca d4 d0 c5 cf a2 61 62 63 31 32 33

从GBK编码 b2 e2 ca d4 d0 c5 cf a2 61 62 63 31 32 33 重新转换为字串: 测试信息abc123

测试信息abc123 -(UCS2)编码: 6d 4b 8b d5 4f e1 60 6f 0 61 0 62 0 63 0 31 0 32 0 33

从(UCS2)编码 6d 4b 8b d5 4f e1 60 6f 0 61 0 62 0 63 0 31 0 32 0 33 重新转换为字串: 测试信息abc123

测试信息abc123 -(ASCII)编码: 3f 3f 3f 3f 61 62 63 31 32 33


 这段时间都在做电信的SP网关程序,原来我是做web应用的,对数据库之类的java编程比较熟悉。原来也从来没有接触过短信网关方面的系统设计和编程。在这个过程中碰到了几个比较棘手的问题,UCS2的转码就是其中一个。
 刚开始我们业务没有涉及到中文信息,所以没有注意这个问题,用户只需要发送字母和数字就可以了,但是最近几天我如果手机传输中文的话,我接收方就有乱码,同时还发现解析出来的字段MsgFormat=8,所以在java中就只需要一句MessageContent = new String(MessageByte,"UnicodeBigUnmarked"),可以就可以转换过来,再保存到数据库中就不会是乱码了;同样的,要根据字段MsgFormat,找出对应的解码字符集参数。
 进行转换后,我还用了另外一个函数把类似“8”这样的GBK编码的阿拉伯数字都转换成了ASCII的数字。这样对业务逻辑有帮助。
 还有一点要说明一下,GB2312是一个比较早版本的中文编码格式,GBK是新的中文编码格式,GBK是GB2312的超集,GB2312是GBK的真子集。 
posted on 2009-08-13 12:14 月光记忆 阅读(3766) 评论(0)  编辑  收藏 所属分类: java基本

只有注册用户登录后才能发表评论。


网站导航:
 
<2024年12月>
24252627282930
1234567
891011121314
15161718192021
22232425262728
2930311234

留言簿(2)

随笔分类

文章分类

文章档案

搜索

  •  

最新评论