URL解码:Java中的UnsupportedEncodingException

Har*_*non 49 java encoding

我从文档中了解到,只有当我指定错误的编码作为URLDecoder.decode(String,String)方法的第二个参数时,才会抛出UnsupportedEncodingException.是这样吗?我需要知道可以抛出此异常的情况.

基本上,我在我的一个函数中有这个代码段:

if (keyVal.length == 2) {
    try {
        value = URLDecoder.decode(
            keyVal[1],
            "UTF-8");
    } catch (UnsupportedEncodingException e) {
          // Will it ever be thrown?
    }
}
Run Code Online (Sandbox Code Playgroud)

由于我明确提到"UTF-8",有什么办法可以抛出这个异常?我是否需要在catch块中做任何事情?或者,如果我的理解完全错误,请告诉我.

Ste*_*n C 51

除非JVM中存在根本性的问题,否则它不可能发生.但我认为你应该把它写成:

try {
    value = URLDecoder.decode(keyVal[1], "UTF-8");
} catch (UnsupportedEncodingException e) {
    throw new AssertionError("UTF-8 is unknown");
    // or 'throw new AssertionError("Impossible things are happening today. " +
    //                              "Consider buying a lottery ticket!!");'
}
Run Code Online (Sandbox Code Playgroud)

这样做的代价是"永远不会"执行的几个字节的代码,以及一个永远不会被使用的字符串文字.这是一个很小的代价,可以防止您误读/误解javadocs(在这种情况下你没有......)或规格可能会改变(在这种情况下它们不会......)

  • JVM将被破坏的一些实际可能的例子是什么? (2认同)

Boz*_*zho 14

那是因为做出选择的奇怪选择UnsupportedEncodingException.不,它不会被抛出.

我通常做如下:

} catch (UnsupportedEncodingException e) {
  throw new AssertionError("UTF-8 not supported");
}
Run Code Online (Sandbox Code Playgroud)


And*_*s_D 5

在您的特殊情况下-不,它不会被抛出。除非您在不支持“ UTF-8”的Java运行时中执行代码。

  • @Mat-我也相信这一点,但是.. Oracle不是Java运行时的唯一供应商。Java语言规范没有提及必须支持的任何编码(除了:UTF-16,这是`char`的指定编码) (3认同)