java – 为什么带有UTF-8的新String包含更多字节
发布时间:2020-12-15 04:45:38 所属栏目:Java 来源:网络整理
导读:byte bytes[] = new byte[16];random.nextBytes(bytes);try { return new String(bytes,"UTF-8");} catch (UnsupportedEncodingException e) { log.warn("Hash generation failed",e);} 当我使用给定方法生成String时,并且当我应用string.getBytes().length
byte bytes[] = new byte[16]; random.nextBytes(bytes); try { return new String(bytes,"UTF-8"); } catch (UnsupportedEncodingException e) { log.warn("Hash generation failed",e); } 当我使用给定方法生成String时,并且当我应用string.getBytes().length时,它返回一些其他值. Max为32.为什么16字节数组最终生成另一个大小的字节字符串? 但如果我做string.length()它返回16. 解决方法
这是因为您的字节首先转换为Unicode字符串,它尝试从这些字节创建UTF-8字符序列.如果一个字节不能被视为ASCII字符,也不能被下一个字节捕获以形成合法的unicode字符,则它将替换为“ ”.调用String#getBytes()时,这样的char被转换为3个字节,从而为结果输出增加了2个额外的字节.
如果你很幸运只生成ASCII字符,String#getBytes()将返回16字节数组,否则,结果数组可能会更长.例如,以下代码段: byte[] b = new byte[16]; Arrays.fill(b,(byte) 190); b = new String(b,"UTF-8").getBytes(); 返回48(!)字节长的数组. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |