Where to get "UTF-8" string literal in Java?
I'm trying to use a constant instead of a string literal in this piece of code:
new InputStreamReader(new FileInputStream(file), "UTF-8")
"UTF-8"
appears in the code rather often, and would be much better to refer to some static final
variable instead. Do you know where I can find such a variable in JDK?
BTW, on a second thought, such constants are bad design: Public Static Literals ... Are Not a Solution for Data Duplication
Solution 1:
In Java 1.7+, java.nio.charset.StandardCharsets defines constants for Charset
including UTF_8
.
import java.nio.charset.StandardCharsets;
...
StandardCharsets.UTF_8.name();
For Android: minSdk 19
Solution 2:
Now I use org.apache.commons.lang3.CharEncoding.UTF_8
constant from commons-lang.
Solution 3:
The Google Guava library (which I'd highly recommend anyway, if you're doing work in Java) has a Charsets
class with static fields like Charsets.UTF_8
, Charsets.UTF_16
, etc.
Since Java 7 you should just use java.nio.charset.StandardCharsets
instead for comparable constants.
Note that these constants aren't strings, they're actual Charset
instances. All standard APIs that take a charset name also have an overload that take a Charset
object which you should use instead.