我正在尝试在这段代码中使用常量而不是字符串文字:
new InputStreamReader(new FileInputStream(file), "UTF-8")
"UTF-8"
经常出现在代码中,而且更好地引用一些static final
变量。你知道我在JDK中哪里能找到这样一个变量吗?
答案 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-lang的org.apache.commons.lang3.CharEncoding.UTF_8
常量。
答案 2 :(得分:61)
Google Guava库(我强烈推荐,如果您正在使用Java工作)有一个Charsets
类,其中包含Charsets.UTF_8
,Charsets.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-ASCII
,org.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