Java Charset.forName(" ASCII")或Charset.forName(" US-ASCII")

时间:2015-08-18 05:07:07

标签: java character-encoding

我正在浏览代码并遇到以下问题。

Charset.forName("ASCII")

但是当我查看java documentation时,它只有

US-ASCII    ISO-8859-1    UTF-8   UTF-16BE   UTF-16LE   UTF-16  

但代码有效。是' ASCII'和' US-ASCII'在这种情况下是同义词?或者是代码采用了一些默认值,因为' ASCII'不承认? 以及#ASCII;' ASCII'在这种情况下代表一个角色?

3 个答案:

答案 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个字节,但范围更广。它支持\u0000u00FF,而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