我试图在这段代码中使用常量而不是字符串文字:

new InputStreamReader(new FileInputStream(file), "UTF-8")

“UTF-8”经常出现在代码中,最好是引用一些静态的final变量。你知道我在JDK的哪里可以找到这样一个变量吗?

顺便说一句,仔细想想,这样的常量是糟糕的设计:公共静态字面量…不是数据复制的解决方案吗


当前回答

没有(至少在标准Java库中)。字符集因平台而异,所以在Java中没有一个标准的字符集列表。

有一些第三方库包含这些常量。其中之一是Guava(谷歌核心库):http://guava-libraries.googlecode.com/svn/trunk/javadoc/com/google/common/base/Charsets.html

其他回答

您可以使用Charset.defaultCharset() API或文件。编码属性。

但如果你想要自己的常数,你需要自己定义它。

没有(至少在标准Java库中)。字符集因平台而异,所以在Java中没有一个标准的字符集列表。

有一些第三方库包含这些常量。其中之一是Guava(谷歌核心库):http://guava-libraries.googlecode.com/svn/trunk/javadoc/com/google/common/base/Charsets.html

在Java 1.7+中

不要使用“UTF-8”字符串,而是使用Charset类型参数:

import java.nio.charset.StandardCharsets

...

new InputStreamReader(new FileInputStream(file), StandardCharsets.UTF_8);

现在我使用来自common -lang的常量org.apache.commons.lang3.CharEncoding.UTF_8。

如果这个页面出现在某人的网页搜索中,从Java 1.7开始,你现在可以使用Java .nio.charset. standardcharsets来访问标准字符集的常量定义。