奇怪的String.getBytes("Unicode")
2011-09-28 15:54
417 查看
最近在进行联网测试的时候,
客户端: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以外的语言编写,有可能不会使用这种方式来标识字节顺,因此要了解对方的细节,这样才能保证数据的准确传递。
希望此文能给遇到相同困惑的人一个好的方法
客户端: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以外的语言编写,有可能不会使用这种方式来标识字节顺,因此要了解对方的细节,这样才能保证数据的准确传递。
希望此文能给遇到相同困惑的人一个好的方法
相关文章推荐
- 奇怪的String.getBytes("Unicode")
- 奇怪的String.getBytes("Unicode")
- 关于在android中String转Unicode也就是 String.getBytes("Unicode")中,额外2个字节的来源
- new String("".getBytes("gbk"),"utf-8")与URLEncoder和URLDecoder比较
- filename=new String(filename.getBytes("iso8859-1"),"utf-8") 解决乱码
- ognl.OgnlException: target is null for setProperty(null, "y", [Ljava.lang.String;@1d57c7)
- ibatis 返回list<String[]>----resultClass="hashMap" 可以实现
- 一道面试题:StringBuffer a=new StringBuffer ("A"); StringBuffer b=new StringBuffer
- 一个自认为奇怪的错误。"||"&height 的错误。
- 关于String s = new String("xyz"); 创建几个对象的问题
- struts2 ognl.OgnlException: target is null for setProperty(null, "pageNO", [Ljava.lang.String;@c3bb57)
- String str = new String(&quot;xyz&quot;) 会创建几个字符串对象
- hadoop 编程报错 Input for string:""
- “无法将类型"string"转换为"char"”?
- java.lang.NumberFormatException: For input string: "19000000000" at java.lang.NumberFormatExceptio
- String str 与 String str=new String("") 区别
- (*env)->NewStringUTF(env, "Hello from JNI!");env->NewStringUTF("Hello from JNI!");
- DateTime.Now.ToString("yyyy/MM/dd") 输出的结果是 2006-03-16
- C# 中 string.Empty、""、null的区别
- String path=new String(request.getParameter("excel").getBytes("ISO8859-1"),"gbk");不能传递中文?