为什么UnsupportedEncodingException不是RuntimeException的子类?

问题描述

我在使用UnsupportedEncodingException和UTF-8编码时遇到了URLEncoder,这迫使我编写这样的代码:

String foo = ... // contains unsafe characters
try {
    foo = URLEncoder.encode(foo,"UTF-8");
} catch (UnsupportedEncodingException e)
    // do something with the exception that should never occur
}

不仅仅是这个:

String foo = ... // contains unsafe characters
foo = URLEncoder.encode(foo,"UTF-8");

documentation of URLEncoder不鼓励使用UTF-8以外的任何其他编码方式:

注:万维网联盟建议书指出应使用UTF-8。不这样做可能会导致不兼容。

至少应根据文档中的Supported Encodings页,并且应始终使用UTF-8编码。

关于how to handle the UnsupportedEncodingException上的问题(甚至可能发生)的公认答案是“除非在您的JVM中有根本性的中断,否则它不会发生”。

所以我想知道,为什么UnsupportedEncodingException类不扩展RuntimeException类,这将允许我使用第二个代码段?仅仅是因为它现在就存在并且很难改变它吗?

解决方法

如果对此进行了更改,则可能会破坏某些现有代码。例如

try {
    ... do something that could throw UnsupportedEncodingException
} catch (IOException e) {
    ... handle the exception
}

如果UnsupportedEncodingException不再是IOException,将不再处理。

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...