Подтвердить что ты не робот

Расшифровка URL: UnsupportedEncodingException в Java

Из документации я понимаю, что 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? Или, если мое понимание совершенно неверно, пожалуйста, дайте мне знать.

4b9b3361

Ответ 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

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

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

} catch (UnsupportedEncodingException e) {
  throw new AssertionError("UTF-8 not supported");
}

Ответ 3

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