mikebai.com

  • Home
  • dev
  • DotNET
  • M365
  • 搞笑
  • 杂七杂八
  • FocusDict
個人BLOG
it developer
  1. Main page
  2. dev
  3. Main content

奇怪的String.getBytes("Unicode")

2011-11-16 133hotness 0likes 0comments

最近在进行联网测试的时候,


客户端:symbian


服务器:java


因为在symbian中,中文是用unicode进行编码的


于是在接收和发送的时候,都必须进行bytes的转换


当我用String.getBytes("Unicode"),进行转换时,总发现客户端发送给服务器的数据总无法被服务器unicode编码


同事服务器发送的数据给客户端,客户端也不能正常的识别


后来当我用String.getBytes("UnicodeBigUnmarked"),数据便一切正常了


于是分析了一下


String temp = "a";


        try {


            byte[] unicodes = temp.getBytes("Unicode");


            System.out.println("unicodes=" + unicodes.length);
            for (int i = 0; i < unicodes.length; i++) {
                System.out.println(unicodes[i]);
            }


            unicodes = temp.getBytes("UnicodeLittleUnmarked");
            System.out.println("unicodes=" + unicodes.length);
            for (int i = 0; i < unicodes.length; i++) {
                System.out.println(unicodes[i]);
            }
          
            unicodes = temp.getBytes("UnicodeBigUnmarked");
            System.out.println("unicodes=" + unicodes.length);
            for (int i = 0; i < unicodes.length; i++) {
                System.out.println(unicodes[i]);
            }


        } catch (UnsupportedEncodingException e) {          
            e.printStackTrace();
        }


输出结果:


unicodes=4
-1
-2
97
0
unicodes=2
97
0
unicodes=2
0
97


为什么会有这种结果呢?蓝色的返回了四个字节,-1,-2,是字节顺的一种表示,这是由sun的类库实现,


指示如果没有指定字节就使用默认的UnicodeLittle


但为了标识这种字节顺,就使用了-1,-2在前面表示。


UnicodeLittleUnmarked的结果,其返回字节只是两个字节,这与Unicode的编码相符合,注意到97,0与使用Unicode时后两个字节顺序一样。


UnicodeBigUnmarked的结果,字节顺与Little相反,也没有-1,-2.


由以上应该知道,temp.getBytes("Unicode");应该小心使用,应该注意它返回的-1,-2,这两个字节,因为在一些网络程序中,特别是当对方是由java以外的语言编写,有可能不会使用这种方式来标识字节顺,因此要了解对方的细节,这样才能保证数据的准确传递。

Tag: Nothing
Last updated:2011-11-16

mikebai

This person is a lazy dog and has left nothing

Like
< Last article
Next article >

COPYRIGHT © 2025 mikebai.com. ALL RIGHTS RESERVED.

Theme Kratos Made By Seaton Jiang