我有一个关于 Charset.forName(String charsetName) 的问题。有我可以参考的 charsetNames 列表吗?例如,对于 UTF-8,我们使用“utf8”作为 charsetName。WINDOWS-1252、GB18030等呢?
4 回答
字符集描述 US-ASCII 七位 ASCII,又名 ISO646-US,又名 Unicode 字符集的基本拉丁语块 ISO-8859-1 ISO 拉丁字母 No. 1,又名 ISO-LATIN-1 UTF-8 八位 UCS 转换格式 UTF-16BE 十六位 UCS 转换格式,大端字节序 UTF-16LE 十六位 UCS 转换格式,little-endian 字节顺序 UTF-16 十六位 UCS 转换格式,由可选字节顺序标记标识的字节顺序
参考:http ://docs.oracle.com/javase/7/docs/api/java/nio/charset/Charset.html
Java 中的字符集名称取决于平台, StandardCharsets类中只有 6 个常量。
要查看所有字符集,您应该查看IANA。检查首选 MIME 名称和别名列。
要列出 JVM 中安装的所有字符集,您可以使用以下代码片段(Java 8 SE 或更高版本):
SortedMap<String, Charset> map = Charset.availableCharsets();
map.keySet().stream().forEach(System.out::println);
在我的系统上,这列出了大约 170 个字符集。
java Charset 库只需要接受一些基本编码:ASCII、Latin-1 (ISO-8859-1) 和一些 UTF 变体,您可以在此答案中看到这些变体。对于任何实际目的而言,这都是一个非常无用的列表,除非您的范围仅限于 Latin-1。实际上,Java 类可以处理大量编码,您可以在Supported Encodings页面中了解这些编码。引用它:
包中的
java.io.InputStreamReader
、java.io.OutputStreamWriter
、java.lang.String
classes 和 classesjava.nio.charset
可以在 Unicode 和许多其他字符编码之间进行转换。支持的编码因 Java SE 8 的不同实现而异。类描述java.nio.charset.Charset
列出了 Java SE 8 的任何实现都需要支持的编码。适用于所有平台(Solaris、Linux 和 Microsoft Windows)的 JDK 8 和适用于 Solaris 和 Linux 的 JRE 8 支持此页面上显示的所有编码。JRE 8 for Microsoft Windows 可以作为完整的国际版本或欧洲语言版本安装。[...]
页面的其余部分包含一个包含编码名称和同义词的扩展表,这就是 OP 多年前的样子......