当前位置:   article > 正文

在Java中 byte[]与String相互转换时数据不一致_java 字符串转byte[]后数值不对

java 字符串转byte[]后数值不对

当我们将byte[]转换成String类型后再将其转换为byte[]时,会发现前后byte[]类型的数据不一致。

看以下代码:

  1. public class test {
  2. public static void main(String[] args) {
  3. byte[] byte1 = new byte[] { 10,34,56,78,90,-2,-5 };
  4. String string = new String(byte1);
  5. byte[] result = string.getBytes();
  6. System.out.println("转换前:"+ Arrays.toString(byte1));
  7. System.out.println("转换后:"+ Arrays.toString(result));
  8. }
  9. }

这段代码输出的结果是这样的

 

经过一番查询之后才发现是编码出了问题。

其解决办法就是使用"ISO-8859-1"编码

  1. public class test {
  2. public static void main(String[] args) throws UnsupportedEncodingException {
  3. byte[] byte1 = new byte[] { 10,34,56,78,90,-2,-5 };
  4. String string = new String(byte1,"ISO-8859-1");
  5. byte[] result = string.getBytes("ISO-8859-1");
  6. System.out.println("转换前:"+ Arrays.toString(byte1));
  7. System.out.println("转换后:"+ Arrays.toString(result));
  8. }
  9. }

运用"ISO-8859-1"编码后的结果就一致啦!!!

 解决原理:

GBK,  GB2312,UTF-8等一些编码方式为多字节或者可变长编码,原来的字节数组就被改变了,再转回原来的byte[]数组就会发生错误了。

ISO-8859-1通常叫做Latin-1,Latin-1包括了书写所有西方欧洲语言不可缺少的附加字符,其中 0~127的字符与ASCII码相同,它是单字节的编码方式,在来回切换时不会出现错误。

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/代码维护者/article/detail/61426
推荐阅读
相关标签
  

闽ICP备14008679号