zoukankan      html  css  js  c++  java
  • [转]关于网络通信,byte[]和String的转换问题

    最近的项目中要使用到把byte[]类型转换成String字符串然后通过网络发送,但发现发现出去的字符串和获取的字符串虽然是一样的,但当用String的getBytes()的方法得到的byte[]跟原来的byte[]是不一样的。

    看如下代码:

    bytebytes[] = new byte[] { 50, 0, -1, 28, -24 };

    String string = new String(bytes);

    byte[] ret = string.getBytes();

    查看ret的数据发现是50, 0, -17, -65, -67, 28, -17, -65, -67,发现数据并不是原来的数据。

    而使用如下代码就可以得到原来的数据:

    bytebytes[] = new byte[] { 50, 0, -1, 28, -24 };

    StringisoString = new String(bytes, "ISO-8859-1");

    byte[] isoret = isoString.getBytes("ISO-8859-1");

    这是为什么呢?原因是第一种方法默认是用UTF-8编码来生成String的,用System.getProperty("sun.jnu.encoding")可以得到Android默认编码是UTF-8。UTF-8是可变长度的编码,原来的字节数组就被改变了。而ISO8859-1通常叫做Latin-1,Latin-1包括了书写所有西方欧洲语言不可缺少的附加字符,其中 0~127的字符与ASCII码相同,它是单字节的编码方式,这样第二种方式生成的String里的字节数组就跟原来的字节数组一样。在new String使用其他编码如GBK,GB2312的话一样也会导致字节数组发生变化,因此要想获取String里单字节数组,就应该使用iso8859-1编码。

  • 相关阅读:
    LeetCode 264. Ugly Number II
    LeetCode 231. Power of Two
    LeetCode 263. Ugly Number
    LeetCode 136. Single Number
    LeetCode 69. Sqrt(x)
    LeetCode 66. Plus One
    LeetCode 70. Climbing Stairs
    LeetCode 628. Maximum Product of Three Numbers
    Leetcode 13. Roman to Integer
    大二暑假周进度报告03
  • 原文地址:https://www.cnblogs.com/DarrenChan/p/6060516.html
Copyright © 2011-2022 走看看