byte[]转String后再用String转回byte[]与起始byte[]不一致问题

本文探讨了Java中字节数组与字符串转换过程中出现的字节数组长度变化问题。测试代码展示了使用不同编码(UTF-8与ISO8859-1)时,字节数组大小的差异。关键在于UTF-8的可变长度编码导致字节数组长度变化。解决方案是使用ISO8859-1编码,以确保字节数组与原始字节数组一致。
摘要由CSDN通过智能技术生成

示例:


@Test
	public void test1() throws UnsupportedEncodingException {
		String url = getUrl();
		HttpRequest request = HttpUtil.createGet(url);
		HttpResponse execute = request.execute();
		byte[] bytes = execute.bodyBytes();
		System.out.println("起始byte[]大小" + bytes.length);
		String str = new String(bytes, "utf-8");
		System.out.println("结束byte[]大小"+str.getBytes("utf-8").length);
	}
	

执行结果:
在这里插入图片描述

使用的编码集是utf-8

.
.
.

问题的解决

原因是默认是用UTF-8编码来生成String的,用System.getProperty(“sun.jnu.encoding”)可以得到当前默认编码是UTF-8。UTF-8是可变长度的编码,原来的字节数组就被改变了。在new String使用其他编码如GBK,GB2312的话一样也会导致字节数组发生变化,因此要想获取String里单字节数组,就应该使用iso8859-1编码。

ISO8859-1通常叫做Latin-1,Latin-1包括了书写所有西方欧洲语言不可缺少的附加字符,其中 0~127的字符与ASCII码相同,它是单字节的编码方式,这样生成的String里的字节数组就跟原来的字节数组一样。

.

编码改成 ISO8859-1

在这里插入图片描述
与原byte[]就一致了

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值