0

编码的规范名称很清楚 - 这是官方列表:我们有API的规范名称和APIjava.nioAPI规范名称。java.iojava.lang

1) 但是历史编码名称列表是什么?

OuputStreamWriter Javadoc用于getEncoding()

如果编码具有历史名称,则返回该名称;否则返回编码的规范名称。

如果此实例是使用OutputStreamWriter(OutputStream, String)构造函数创建的,则返回的名称(对于编码而言是唯一的)可能与传递给构造函数的名称不同

Charset Java文档

某些字符集具有为与 Java 平台的早期版本兼容而定义的历史名称。字符集的历史名称要么是它的规范名称,要么是它的别名之一。历史名称由 InputStreamReader 和 OutputStreamWriter 类的 getEncoding() 方法返回。

2)编码 官方列表的规范名称声明java.io规范名称应使用“UTF8”,而“UTF-8”是新的规范名称java.nio

但 InputStreamReader/OutputStreamWriter 确实接受“UTF-8”参数!

try {
    FileOutputStream stream1 = new FileOutputStream("d:\\file.txt");
    OutputStreamWriter writer1 = new OutputStreamWriter(stream1, "UTF-8");
    System.out.println(writer1.getEncoding());
    writer1.close();
} catch (UnsupportedEncodingException e) {
    System.out.println("wrong encoding detected"); // never triggered
}

似乎“UTF-8”被识别得很好,没有UnsupportedEncodingException被解雇!

PS我认为现在(SE8)任何API(甚至非NIO)都可以接受NIO风格,而java.lang/java.io风格被称为历史。至少对于 InputStreamReader/OutputStreamWriter 来说似乎是正确的。

我的提议成立吗?

4

0 回答 0