我试图在这段代码中使用常量而不是字符串文字:
new InputStreamReader(new FileInputStream(file), "UTF-8")
"UTF-8"经常出现在代码中,如果引用一些static final变量会更好。你知道我在JDK的哪里可以找到这样一个变量吗?
"UTF-8"
static final
顺便说一句,转念一想,这样的常量是糟糕的设计:公共静态字面量…不是数据复制的解决方案吗
您可以使用Charset.defaultCharset() API或file.encoding属性。
Charset.defaultCharset()
file.encoding
但如果你想要自己的常数,你需要自己定义它。
没有(至少在标准Java库中)。字符集因平台而异,所以在Java中没有一个标准的字符集列表。
有一些第三方库包含这些常量。其中之一是Guava(谷歌核心库):http://guava-libraries.googlecode.com/svn/trunk/javadoc/com/google/common/base/Charsets.html
谷歌番石榴库(如果你用Java工作,我强烈推荐它)有一个带有静态字段的Charsets类,如Charsets.UTF_8, Charsets.UTF_16等。
Charsets
Charsets.UTF_8
Charsets.UTF_16
从Java 7开始,您应该只使用java.nio.charset.StandardCharsets来代替类似的常量。
java.nio.charset.StandardCharsets
注意,这些常量不是字符串,它们是实际的Charset实例。所有采用字符集名称的标准api都有一个重载,该重载采用Charset对象,您应该使用该对象。
Charset
现在我使用org.apache.commons.lang3.CharEncoding.UTF_8常量从commons lang。
org.apache.commons.lang3.CharEncoding.UTF_8
这个常量也可以在类org.apache.commons.codec.CharEncoding中使用(其中包括:UTF-16, US-ASCII等)。
org.apache.commons.codec.CharEncoding
UTF-16
US-ASCII
如果在某些人的网页搜索中出现这个页面,从Java 1.7开始,你现在可以使用java.nio.charset.StandardCharsets来访问标准字符集的常量定义。
在Java 1.7+中,java.nio.charset.StandardCharsets为Charset定义常量,包括UTF_8。
UTF_8
import java.nio.charset.StandardCharsets; ... StandardCharsets.UTF_8.name();
Android: minSdk 19
如果你在Java/Android上使用OkHttp,你可以使用以下常量:
import com.squareup.okhttp.internal.Util; Util.UTF_8; // Charset Util.UTF_8.name(); // String
标准的常量定义。这些 字符集保证在Java的每个实现上都可用 平台。自1.7
package java.nio.charset; Charset utf8 = StandardCharsets.UTF_8;
在Java 1.7+中
不要使用“UTF-8”字符串,而是使用Charset类型参数:
import java.nio.charset.StandardCharsets ... new InputStreamReader(new FileInputStream(file), StandardCharsets.UTF_8);
Java 7引入java.nio.charset.StandardCharsets后,org.apache.commons.lang3.CharEncoding.UTF_8类已弃用