2

我得到以下代码,它将 char[] 转换为 byte[]:

char[] cPwd = {'p', 'a', 's', 's', 'w', 'o', 'r', 'd'};
byte[] bPwd = new byte[cPwd.length * 2];
ByteBuffer.wrap(bPwd).asCharBuffer().put(cPwd);

我猜上面的代码将使用默认的平台编码(我想是 UTF-8 或 16)。正确的?

我如何确保上面 char[] 中的字符使用特定的编码,比如 UTF-16,而不是依赖默认的平台编码?

ps - 我的场景有一个限制:我不允许将此 char[] 转换为类似 in 的字符串

String str = new String(cPwd, "UTF-16");

先感谢您。

亚历克斯。

4

2 回答 2

2

当 VM 看到它们时,您在代码中指定为文字的字符将是 16 位 Unicode 字符。asCharBuffer() 方法未指定为执行任何编码。换句话说,您应该有效地获得 UTF-16,无论是小端还是大端,具体取决于 ByteBuffer 的字节序。

如果你想要另一个编码而不通过 String 构造函数,你可以使用 CharSet.encode() 方法:

        CharBuffer cb = CharBuffer.wrap(your chars);
        Charset cs = Charset.forName("UTF-8");
        ByteBuffer bb = cs.encode(cb);
于 2012-06-11T02:42:15.567 回答
1

我猜上面的代码将使用默认的平台编码(我想是 UTF-8 或 16)。正确的?

我不这么认为。如果我对 javadoc 的理解是正确的,该asCharBuffer()方法会返回一个“视图”,它将字符表示为字节而不进行任何编码。因此字节缓冲区将包含相当于 UTF-16(即每个字符 2 个字节)而没有任何 BOM。

于 2012-06-11T02:55:05.407 回答