java byte[] bytes包含utf-8中文字符,截取120位,怎么保证不出现乱码
时间: 2024-09-24 20:25:37 浏览: 39
在Java中,如果你有一个`byte[]`数组,其中包含了UTF-8编码的中文字符,并想要截取120位(通常是15个字节,因为UTF-8中一个汉字占用3到4个字节),需要特别注意字符边界,因为UTF-8不是一个定长编码,所以直接按字节数切割可能会导致乱码。
正确的做法应该是先将整个`byte[]`转换成`String`,然后根据UTF-8字符的长度来确定截取的位置。你可以使用`new String(bytes, "UTF-8")`来解析字节数组。当你想截取指定长度时,计算出对应的字符数,而不是字节数,例如:
```java
int start = 0;
if (bytes.length > 120) {
int charIndex = 0;
for (int i = 0; i < bytes.length; i++) {
charIndex += (bytes[i] & 0xFF) <= 0x7F ? 1 : 2; // 每个UTF-8编码的字节个数
if (charIndex >= 15) { // 假设最多15个字符,调整为实际需求
start = i * 2; // 字节转字符,每个字符2个字节
break;
}
}
}
String substring = new String(Arrays.copyOfRange(bytes, start, start + 15 * 2), "UTF-8");
```
这样就能确保截取的字符串不会出现乱码了。
阅读全文