在Java中哪里可以获得“UTF-8”字符串文字?

Where to get “UTF-8” string literal in Java?

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

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

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

顺便说一句,这种常量的设计很糟糕:公共静态文本…不是重复数据的解决方案


在Java 1.7中,JavaNIO.CARSET.Stand ARTHARSET为EDCOX1 6定义了常数,包括EDCOX1×13。

1
2
3
4
5
import java.nio.charset.StandardCharsets;

...

StandardCharsets.UTF_8.name();

Android版:Minsdk 19


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


不管怎样,我都极力推荐的谷歌番石榴库(如果您在Java中工作),有一个具有4到2个类的静态字段,如3。

由于Java 7,你应该只使用EDCOX1,5,而不是类似的常量。

注意,这些常量不是字符串,而是实际的Charset实例。所有采用字符集名称的标准API也都有一个重载,它采用一个Charset对象,您应该使用它来代替。


如果这个页面出现在某人的Web搜索中,就像Java 1.7一样,现在可以使用java. NIO.CARSET.Stand ARTHARSET来访问标准字符集的常量定义。


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

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


这个常数(除其他外,如:UTF-16US-ASCII等)也可用于org.apache.commons.codec.CharEncoding类。


您可以使用Charset.defaultCharset()API或file.encoding属性。

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


用Java 1.7 +

不要使用"utf-8"字符串,而是使用Charset类型参数:

1
2
3
4
5
import java.nio.charset.StandardCharsets

...

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


标准的常量定义。这些在Java的每一个实现中都可以保证字符集可用。平台。从1.7开始

1
2
 package java.nio.charset;
 Charset utf8 = StandardCharsets.UTF_8;

如果您使用OKHTTP用于Java/Android,您可以使用以下常量:

1
2
3
4
import com.squareup.okhttp.internal.Util;

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