我正在看一段代码,遇到了下面这行。
Charset.forName("ASCII")但是当我查看java documentation时,它只有
US-ASCII ISO-8859-1 UTF-8 UTF-16BE UTF-16LE UTF-16 但是代码是有效的。在这种情况下,'ASCII‘和'US-ASCII’是同义词吗?或者,由于无法识别'ASCII‘,代码是否采用了一些默认值?在这种情况下,'ASCII‘代表一个字符有多少字节?
发布于 2015-08-18 13:36:15
文档指出:
每个字符集都有一个规范的名称,还可以有一个或多个别名。规范名称由该类的name方法返回。按照惯例,规范名称通常是大写的。通过aliases方法返回字符集的别名。
此外,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发布于 2015-08-18 13:09:40
ASCII是US-ASCII的别名。它为每个字符使用一个7位字节。
注意:如果您想要简洁,我建议使用ISO-8859-1。这也是每个字符使用1个字节,但范围更广。它支持\u0000到u00FF,而US-ASCII支持\u0000到\u007F
发布于 2015-08-18 13:14:15
运行以下代码段,打印所有可用的字符集:
SortedMap<String,Charset> availableCharsets = Charset.availableCharsets();
Set<String> keySet = availableCharsets.keySet();
for (String key : keySet) {
System.out.println(key);
}我在列表中看不到ASCII。查看Charset类中的defaultCharset()代码可以看到,如果file.encoding是无效的,它将缺省为'utf-8‘。
运行以下代码片段,打印'UTF-8‘作为默认字符集。
System.setProperty("file.encoding", "ASCII");
System.out.println(Charset.defaultCharset());https://stackoverflow.com/questions/32063929
复制相似问题