为什么Java的`String.toCharArray()`和`new String(char[])`方法不接受字符集编码?

3
为什么Java的String.toCharArray()和new String(char[])方法不接受字符集编码?
如果您使用byte[],则可以使用String.getBytes(charset)和new String(byte[], charset)可选地指定字符集。
我想知道是否有关于char[]和字符集编码的问题我没有理解。在Javadocs中没有特别说明这种差异。

2
什么是 char - Sotirios Delimanolis
这是Java的基本类型。 - Jonathan S. Fisher
2
嗯,是的。但它代表什么? - Sotirios Delimanolis
4
有的。字符集(charset)是用于将字节(bytes)和字符(chars)之间进行转换的方式。字符串(string)由字符组成。如果您已经拥有了字符,那么就不需要再进行转换了。 - Louis Wasserman
啊哈哈哈。灯亮了。谢谢! - Jonathan S. Fisher
我认为@SotiriosDelimanolis的意思是答案在Java语言文档中显而易见。(UTF-16代码单元 - 同样适用于.NET、JavaScript、HTML、XML等) - Tom Blodget
1个回答

7
这些方法并不执行编码,它们只是表示 String 实例的内部状态的副本。
编码是将逻辑字形转换为数字表示(即一系列字节)的过程。可以将 String 视为表示 Unicode 字形序列的字符串。 String 类具有访问这些字形的 API,例如访问 32 位代码点或使用 UTF-16-BE 编码的一系列 16 位值(这恰好是字符串的本机内部表示),或使用选择的编码中的一系列字节。在最后一种情况下,您只需要指定编码。
一些编码(如 UTF-8)支持所有 Unicode 字符,而其他许多编码(如 US-ASCII)仅支持很小一部分字符。基于 char[] 的 API 不允许指定不同的编码(如 UTF-16-LE 或带 BOM 的 UTF-16),因为一个编码已经足够,并且提高了统一性以减少由不匹配的编码引起的错误。

啊,那么toCharArray就是Java内部的UTF-16编码? - Jonathan S. Fisher
1
@JonathanS.Fisher 是的,完全正确。 - erickson

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接