我得到了以下代码,它将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 []转换为类似于
的字符串String str = new String(cPwd, "UTF-16");
提前谢谢。
亚历。
答案 0 :(得分: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);
答案 1 :(得分:1)
我猜测上面的代码会使用默认的平台编码(UTF-8或16,我猜)。正确?
我不这么认为。如果我对javadoc的理解是正确的,asCharBuffer()
方法将返回一个“视图”,它将字符表示为字节而不进行任何编码。所以字节缓冲区将包含相当于UTF-16(即每个字符2个字节),没有任何BOM。