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

时间:2011-07-14 18:45:03

标签: java

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

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

"UTF-8"经常出现在代码中,而且更好地引用一些static final变量。你知道我在JDK中哪里能找到这样一个变量吗?

顺便说一句,顺便提一下,这些常数是糟糕的设计:Public Static Literals ... Are Not a Solution for Data Duplication

11 个答案:

答案 0 :(得分:733)

在Java 1.7+中,java.nio.charset.StandardCharsets定义Charset的常量,包括UTF_8

import java.nio.charset.StandardCharsets;

...

StandardCharsets.UTF_8.name();

适用于Android:minSdk 19

答案 1 :(得分:127)

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

答案 2 :(得分:61)

Google Guava库(我强烈推荐,如果您正在使用Java工作)有一个Charsets类,其中包含Charsets.UTF_8Charsets.UTF_16等静态字段等等。

从Java 7开始,您只需使用java.nio.charset.StandardCharsets代替可比较的常量。

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

答案 3 :(得分:44)

如果此页面出现在某些Web搜索中,从Java 1.7开始,您现在可以使用java.nio.charset.StandardCharsets来访问标准字符集的常量定义。

答案 4 :(得分:8)

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

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

答案 5 :(得分:7)

此常量在类UTF-16中也可用(US-ASCIIorg.apache.commons.codec.CharEncoding等)。

答案 6 :(得分:6)

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

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

答案 7 :(得分:3)

标准的常量定义。这些   保证在每次实现Java时都可以使用charsets   平台。自1.7以来

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

答案 8 :(得分:3)

在Java 1.7 +

请勿使用“ UTF-8”字符串,而应使用Charset类型参数:

import java.nio.charset.StandardCharsets

...

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

答案 9 :(得分:2)

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

import com.squareup.okhttp.internal.Util;

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

答案 10 :(得分:0)

在Java 7引入org.apache.commons.lang3.CharEncoding.UTF_8

之后,不推荐使用类java.nio.charset.StandardCharsets
  • @see JRE character encoding names
  • @since 2.1
  • @deprecated Java 7引入了{@link java.nio.charset.StandardCharsets},该常量将这些常量定义为
  • {@ link Charset}对象。使用{@link Charset#name()}获取此类中提供的字符串值。
  • 该类将在以后的版本中删除。