Java UTF-8 字符集异常是否可能?

2022-09-02 22:55:51

Java在使用编码时可能会抛出,或者我可以安全地抑制它抛出吗?UnsupportedEncodingException"UTF-8"


答案 1

正如 McDowell 在对 templatetypdef 答案的评论中指出的那样:如果您在实例化新对象时使用对象,而不是传递字符集的名称,则不必处理或任何其他已检查的异常:CharsetStringUnsupportedEncodingException

byte[] bytes = ...;

// Requires you to handle UnsupportedEncodingException
String s1 = new String(bytes, "UTF-8");

// Doesn't require you to handle any checked exceptions
String s2 = new String(bytes, Charset.forName("UTF-8"));

这是Java标准库中的不一致,我们必须忍受......

请注意,可以引发异常 (, , ),但这些都是未经检查的异常,因此您不必自己捕获或重新抛出它们。Charset.forName(...)IllegalCharsetNameExceptionIllegalArgumentExceptionUnsupportedCharsetException

edit - 从Java 7开始,有一个类具有常用字符编码的常量。例:java.nio.charset.StandardCharsets

String s3 = new String(bytes, StandardCharsets.UTF_8);

答案 2

根据Javadoc for Charset的说法,每个Java实现都必须支持UTF-8,以及其他一些字符集。因此,我认为您可以安全地抑制异常;除非你有一个不合规的Java实现,否则这不应该失败。