Java byte[] 到/从 String 转换

标签 java string utf-8 byte bytearray

为什么这个 junit 测试失败了?

import org.junit.Assert;
import org.junit.Test;

import java.io.UnsupportedEncodingException;

public class TestBytes {
    @Test
    public void testBytes() throws UnsupportedEncodingException {
        byte[] bytes = new byte[]{0, -121, -80, 116, -62};
        String string = new String(bytes, "UTF-8");
        byte[] bytes2 = string.getBytes("UTF-8");
        System.out.print("bytes2: [");
        for (byte b : bytes2) System.out.print(b + ", ");
        System.out.print("]\n");
        Assert.assertArrayEquals(bytes, bytes2);
    }
}

我会假设传入的字节数组等于结果,但不知何故,可能由于 UTF-8 字符占用两个字节这一事实,结果数组在内容和长度上都与传入数组不同。

请赐教。

最佳答案

原因是 0, -121, -80, 116, -62 不是有效的 UTF-8 字节序列。 new String(bytes, "UTF-8") 在这种情况下不会抛出任何异常,但结果很难预测。阅读http://en.wikipedia.org/wiki/UTF-8 无效的字节序列部分。

关于Java byte[] 到/从 String 转换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16232023/

相关文章:

java - 为什么将 Lucene 的 MoreLikeThis 及其 TermQueries 限制在 docFreq 最高的字段?

java - 将数据库调用放在自定义 ConstraintValidator 的 `isvalid()` 方法中会导致 stackoverflow 错误,因为它被重复调用

C++ 字符串迭代器 "find first of"

php - TCPDF 不显示来自 mysql 的 č、ć、ž、š、đ 仅空白页

python - Utf-8 与 sqlalchemy 在具有 init connect 的数据库上

java - 在字符串数组中搜索字符串

java - 如何解析时间范围输入?

c - Mac 上连接字符集时出现总线错误 10

ios - Swift 3 : how to convert a UTF8 data stream (1, 每个字符 2,3 或 4 个字节)到字符串?

java - 无法在 Spring Boot 应用程序中使用 AWS SDK(套接字不是由该工厂创建的)