代码片段:
这似乎是因为,在 java.nio.charset.CharsetEncoder 类中,UTF-8 的 averageBytesPerChar 变量在底层似乎为 1.1。因此它分配了 11 个字节而不是 10 个字节,如果输入字符串只包含单字节字符,则最后会得到奇怪的空字符。
我想知道这是否有任何文档记录?
这个页面:
附言:我理解得对,无论如何,上面的片段最好被替换为:
我从它的来源中看到,它也修剪结果以避免那些空字符?那么,java.nio.charset.Charset的encode(String s)方法是用来做什么的?
public static void main(String[] args) {
String s = "qwertyuiop";
System.out.println(Arrays.toString(Charset
.forName("UTF-8")
.encode(s)
.array()));
}
输出:
[113, 119, 101, 114, 116, 121, 117, 105, 111, 112, 0]
这似乎是因为,在 java.nio.charset.CharsetEncoder 类中,UTF-8 的 averageBytesPerChar 变量在底层似乎为 1.1。因此它分配了 11 个字节而不是 10 个字节,如果输入字符串只包含单字节字符,则最后会得到奇怪的空字符。
我想知道这是否有任何文档记录?
这个页面:
https://docs.oracle.com/javase/7/docs/api/java/nio/charset/Charset.html#encode(java.lang.String)
不提供有关这种行为的线索。附言:我理解得对,无论如何,上面的片段最好被替换为:
s.getBytes(StandardCharsets.UTF_8)
我从它的来源中看到,它也修剪结果以避免那些空字符?那么,java.nio.charset.Charset的encode(String s)方法是用来做什么的?