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

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

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

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


当前回答

在Java 7引入Java .nio.charset. standardcharsets后,类org.apache.commons.lang3.CharEncoding.UTF_8已被弃用

@see JRE字符编码名称 @since 2.1 Java 7引入了{@link Java .nio.charset。StandardCharsets},将这些常量定义为 {@link字符集}对象。使用{@link Charset#name()}获取该类中提供的字符串值。 这个类将在未来的版本中删除。

其他回答

在Java 1.7+中,Java .nio. Charset . standardcharsets为Charset定义常量,包括UTF_8。

import java.nio.charset.StandardCharsets;

...

StandardCharsets.UTF_8.name();

Android: minSdk 19

谷歌Guava库(如果你用Java工作,我强烈推荐它)有一个Charsets类,它带有像Charsets这样的静态字段。UTF_8,数据集。UTF_16等等。

从Java 7开始,你应该只使用Java .nio.charset. standardcharsets来代替类似的常量。

注意,这些常量不是字符串,它们是实际的Charset实例。所有采用字符集名称的标准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);

如果你在Java/Android上使用OkHttp,你可以使用以下常量:

import com.squareup.okhttp.internal.Util;

Util.UTF_8; // Charset
Util.UTF_8.name(); // String