有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

编码URL解码:Java中的UnsupportedEncodingException

我从文档中了解到UnsupportedEncodingException只能在我将错误编码指定为URLDecover的第二个参数时抛出。解码(字符串,字符串)方法。是这样吗?我需要知道可以抛出此异常的情况

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

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

既然我明确提到了“UTF-8”,有没有任何方法可以抛出这个异常?我需要在接球区做些什么吗?或者,如果我的理解完全错误,请让我知道


共 (4) 个答案

  1. # 1 楼答案

    它不可能发生,除非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!!");'
    }
    

    这样做的代价是几个字节的代码“永远”不会被执行,一个字符串文字永远不会被使用。这对于防止您误读/误解javadocs(在本例中您没有…)的可能性来说是一个很小的代价或者规格可能会改变(在这种情况下不会改变…)

  2. # 2 楼答案

    这是因为选择UnsupportedEncodingException进行检查很奇怪。不,不会被扔的

    我通常会这样做:

    } catch (UnsupportedEncodingException e) {
      throw new AssertionError("UTF-8 not supported");
    }
    
  3. # 3 楼答案

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

  4. # 4 楼答案

    为新读者回答一个老问题:

    Java11现在有URLDecoder.decode(String, Charset);,它不会抛出。所以你根本不需要使用试抓块。只要做:

    URLDecoder.decode(keyVal[1], StandardCharsets.UTF_8);