赞
踩
当我们将byte[]转换成String类型后再将其转换为byte[]时,会发现前后byte[]类型的数据不一致。
看以下代码:
- public class test {
- public static void main(String[] args) {
- byte[] byte1 = new byte[] { 10,34,56,78,90,-2,-5 };
-
- String string = new String(byte1);
-
- byte[] result = string.getBytes();
-
- System.out.println("转换前:"+ Arrays.toString(byte1));
- System.out.println("转换后:"+ Arrays.toString(result));
-
- }
- }
这段代码输出的结果是这样的
经过一番查询之后才发现是编码出了问题。
其解决办法就是使用"ISO-8859-1"编码
- public class test {
- public static void main(String[] args) throws UnsupportedEncodingException {
- byte[] byte1 = new byte[] { 10,34,56,78,90,-2,-5 };
-
- String string = new String(byte1,"ISO-8859-1");
-
- byte[] result = string.getBytes("ISO-8859-1");
-
- System.out.println("转换前:"+ Arrays.toString(byte1));
- System.out.println("转换后:"+ Arrays.toString(result));
-
- }
- }
运用"ISO-8859-1"编码后的结果就一致啦!!!
GBK, GB2312,UTF-8等一些编码方式为多字节或者可变长编码,原来的字节数组就被改变了,再转回原来的byte[]数组就会发生错误了。
ISO-8859-1通常叫做Latin-1,Latin-1包括了书写所有西方欧洲语言不可缺少的附加字符,其中 0~127的字符与ASCII码相同,它是单字节的编码方式,在来回切换时不会出现错误。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。