2014-11-09 1 views
1

Я пытаюсь преобразовать строку в кодировку UTF-8. Но компиляция терпит неудачу, потому что какой-то код «бросает UnsupportedEncodingException».Как бороться с проверенным исключением (UnsupportedEncodingException), которое никогда не может произойти?

String s = "1,2,3,4"; 
String smsext = new String(s.getBytes(),"UTF-8"); 

как это решить?

ответ

3

Исключение UnsupportedEncodingException выбрано конструктором String (не для Android Studio !!!). Это проверенное исключение, поэтому ваш код должен каким-то образом обработать его.

В данном конкретном случае: исключение никогда не будет выбрано из-за того, что «UTF-8» жестко закодирован и всегда поддерживается любой JVM (это требование). Таким образом, вы можете поймать его беззвучно:

String s = "1,2,3,4"; 
String smsext = null; 
try{ 
    smsext = new String(s.getBytes(),"UTF-8"); 
}catch(UnsupportedEncodingException e){ 
    //can never occurs 
} 

Но я не рекомендую это более упрощенный подход потому молча ловить исключение почти всегда очень плохая практика. Более подходящим решением для пойманной исключением того, что никогда не Append является повторно выдать исключение, инкапсулированный в непроверенного исключения:

String s = "1,2,3,4"; 
String smsext = null; 
try{ 
    smsext = new String(s.getBytes(),"UTF-8"); 
}catch(UnsupportedEncodingException e){ 
    //can never occurs because UTF-8 is always supported 
    throw new RuntimeException(e); 
} 

С помощью этого кода, если один день вы меняете тело блока примерки поймать, так что UnsupportedEncodingException может произойти: исключение не будет игнорироваться молча.

+0

права, я забываю попробовать {} поймать {}, так что бросает этот UnsupportedEncodingException.thank вы. – wky

0

пытается использовать конструктор типа String с кодировками paramete (с попыткой поймать {} {}), посмотри на this answer

+0

прав, благодарю ваш ответ. – wky