首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Java Charset.forName("ASCII")或Charset.forName("US-ASCII")

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

Stack Overflow用户
提问于 2015-08-18 13:07:07
回答 3查看 30.3K关注 0票数 11

我正在看一段代码,遇到了下面这行。

代码语言:javascript
复制
Charset.forName("ASCII")

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

代码语言:javascript
复制
US-ASCII    ISO-8859-1    UTF-8   UTF-16BE   UTF-16LE   UTF-16  

但是代码是有效的。在这种情况下,'ASCII‘和'US-ASCII’是同义词吗?或者,由于无法识别'ASCII‘,代码是否采用了一些默认值?在这种情况下,'ASCII‘代表一个字符有多少字节?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2015-08-18 13:36:15

文档指出:

每个字符集都有一个规范的名称,还可以有一个或多个别名。规范名称由该类的name方法返回。按照惯例,规范名称通常是大写的。通过aliases方法返回字符集的别名。

此外,Charset.forName(String charsetName)的javadoc告诉您:

charsetName -请求的字符集的名称;可以是规范名称或别名

使用此代码,您可以找到有关字符集的更多信息:

代码语言:javascript
复制
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
票数 22
EN

Stack Overflow用户

发布于 2015-08-18 13:09:40

ASCII是US-ASCII的别名。它为每个字符使用一个7位字节。

注意:如果您想要简洁,我建议使用ISO-8859-1。这也是每个字符使用1个字节,但范围更广。它支持\u0000u00FF,而US-ASCII支持\u0000\u007F

票数 1
EN

Stack Overflow用户

发布于 2015-08-18 13:14:15

运行以下代码段,打印所有可用的字符集:

代码语言:javascript
复制
    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‘作为默认字符集。

代码语言:javascript
复制
    System.setProperty("file.encoding", "ASCII");
    System.out.println(Charset.defaultCharset());
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/32063929

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档