Как отметил Макдауэлл в комментарии к ответ templatetypdef : если вы используете объект Charset
при создании нового String
вместо передачи имени кодировки, вам не нужноиметь дело с UnsupportedEncodingException
или любым другим проверенным исключением:
byte[] bytes = ...;
// Requires you to handle UnsupportedEncodingException
String s1 = new String(bytes, "UTF-8");
// Doesn't require you to handle any checked exceptions
String s2 = new String(bytes, Charset.forName("UTF-8"));
Это несоответствие в стандартной библиотеке Java, с которой нам приходится жить ...
Обратите внимание, что Charset.forName(...)
может выдатьисключения (IllegalCharsetNameException
, IllegalArgumentException
, UnsupportedCharsetException
), но все они являются непроверенными исключениями, поэтому вам не нужно ловить или перебрасывать их самостоятельно.
edit - Начиная с Java 7 существует класс java.nio.charset.StandardCharsets
, который имеет константы для часто используемых кодировок символов.Пример:
String s3 = new String(bytes, StandardCharsets.UTF_8);