我正在浏览代码并遇到以下问题。
Charset.forName("ASCII")
但是当我查看java documentation时,它只有
US-ASCII ISO-8859-1 UTF-8 UTF-16BE UTF-16LE UTF-16
但代码有效。是' ASCII'和' US-ASCII'在这种情况下是同义词?或者是代码采用了一些默认值,因为' ASCII'不承认? 以及#ASCII;' ASCII'在这种情况下代表一个角色?
答案 0 :(得分:19)
文档指出:
每个字符集都有一个规范名称,也可能有一个或多个 别名。规范名称由此名称方法返回 类。按照惯例,规范名称通常是大写的。该 别名方法返回charset的别名。
此外,Charset.forName(String charsetName)
的javadoc告诉您:
charsetName - 请求的字符集的名称;也许是一个 规范名称或别名
使用此代码,您可以找到有关字符集的更多信息:
Charset ascii = Charset.forName("US-ASCII");
System.out.println(ascii.aliases());
// [ANSI_X3.4-1968, cp367, csASCII, iso-ir-6, ASCII, iso_646.irv:1983, ANSI_X3.4-1986, ascii7, default, ISO_646.irv:1991, ISO646-US, IBM367, 646, us]
System.out.println(ascii.newEncoder().maxBytesPerChar());
// 1.0
Charset utf8 = Charset.forName("UTF-8");
System.out.println(utf8.newEncoder().maxBytesPerChar());
// 3.0
答案 1 :(得分:1)
ASCII是US-ASCII的别名。它为每个字符使用7位字节。
注意:如果您想要紧凑和简洁,我建议使用ISO-8859-1。这也使用每个字符1个字节,但范围更广。它支持\u0000
到u00FF
,而US-ASCII支持\u0000
到\u007F
答案 2 :(得分:1)
运行以下代码段,打印所有可用的字符集:
null
我在列表中看不到ASCII。在Charset类中查看 SortedMap<String,Charset> availableCharsets = Charset.availableCharsets();
Set<String> keySet = availableCharsets.keySet();
for (String key : keySet) {
System.out.println(key);
}
的代码会显示,如果defaultCharset()
是无效的,则默认为&#39; utf-8&#39;。
运行以下代码段,打印&#39; UTF-8&#39;作为默认的字符集。
file.encoding