为什么Java的String.toCharArray()
和new String(char[])
方法不接受字符集编码?
如果您使用byte[]
,则可以选择使用String.getBytes(charset)
和new String(byte[], charset)
指定字符集。
我想知道是否有关于char[]
和charset编码的内容我不明白。 Javadocs中没有任何特别的东西可以解释这种差异。
答案 0 :(得分:7)
这些方法不执行编码,它们只是代表String
实例内部状态的副本。
编码是将逻辑字形转换为数字表示(一系列字节)的过程。可以将String
视为表示Unicode字形序列。 String
类具有API,可以将这些字形作为32位代码点访问,或者作为一系列使用UTF-16-BE编码的16位值(恰好是字符串的本机,内部表示),或作为所选编码中的一系列字节。您只需要在最后一种情况下指定编码。
某些编码(如UTF-8)支持所有Unicode字符,而许多其他编码(如US-ASCII)仅支持一小部分。基于char[]
的API不允许指定不同的编码(UTF-16-LE或带有BOM的UTF-16),因为一个就足够了,并且促进一致性可以最大限度地减少编码不匹配时的错误。