Декодирование URL: UnsupportedEncodingException в Java - PullRequest
48 голосов
/ 17 мая 2011

Насколько я понимаю из документации, UnsupportedEncodingException может быть выдано только в том случае, если в качестве второго параметра метода URLDecoder.decode (String, String) указана неправильная кодировка. Это так? Мне нужно знать случаи, когда это исключение может быть выдано.

По сути, у меня есть этот сегмент кода в одной из моих функций:

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

Поскольку я прямо упоминаю "UTF-8", есть ли способ, которым это исключение может быть выдано? Нужно ли что-то делать в блоке catch? Или, если мое понимание полностью неверно, пожалуйста, дайте мне знать.

Ответы [ 3 ]

50 голосов
/ 17 мая 2011

Этого не может быть, если в вашей виртуальной машине Java что-то не работает. Но я думаю, что вы должны написать это как:

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 (у вас нет в этом случае ...) или что спецификации могут измениться (они не будут в этом случае ...)

14 голосов
/ 17 мая 2011

Это из-за странного выбора сделать UnsupportedEncodingException проверенным. Нет, его не бросят.

Обычно я делаю следующее:

} catch (UnsupportedEncodingException e) {
  throw new AssertionError("UTF-8 not supported");
}
5 голосов
/ 17 мая 2011

В вашем особом случае - нет, оно не будет брошено. Если вы не выполняете свой код во время выполнения Java, которое не поддерживает "UTF-8".

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...