2017-02-16 16 views
0

Мне нужно преобразовать строку в UTF-8. Теперь в моем коде я это:как преобразовать строку в UTF-8 без ошибки catch

sb.append(URLEncoder.encode(smsAnswerText, "UTF-8")) 

но метод кодирования бросить исключение UnsupportedEncodingException

Я переписать: sb.append(smsAnswerText) becouse написать this

и я неправильно tуxt -unreadable символов

Тогда я попытался new String(smsAnswerText.getBytes(),StandardCharsets.UTF_8) И этот метод также исключает исключение UnsupportedEncodingException

Как преобразовать Sting в String + UTF-8 без UnsupportedEncodingException?

мне нужно:

public static String generateBodyResponse(String smsAnswerText){ 
    return// smsAnswerText in UTF-8 
} 

У меня есть

public static String generateBodyResponse(String smsAnswerText) throws UnsupportedEncodingException{ 
     return URLEncoder.encode(smsAnswerText, "UTF-8"); 
    } 
+0

Вы имеете в виду, что это исключение из среды выполнения или что необходимо обернуть его в try ... catch из-за отмеченного исключения? – Andremoniy

+0

Я часто использую этот метод и не хочу бросать это исключение. возможно, есть способ конвертировать без выпуска исключений – user5620472

+0

https://stackoverflow.com/questions/10402048/is-there-a-common-java-library-that-will-handle-url-encoding-decoding-for- a-coll –

ответ

0

Я не думаю, что любой провайдер глотания альтернативы exception.The вы можете попробовать используют

<dependency>        
<groupId>org.projectlombok</groupId> 
<artifactId>lombok</artifactId> 
<version>0.10.0</version> 
<scope>compile</scope> 
</dependency> 

Здесь Добавлена ​​аннотация @SneakyThrows. Используя это Вы можете избежать бросков и метать ключевые слова

+0

@Mark: Спасибо. Я учусь использовать сейчас. :) – user121290

0

Почему бы вам не попробовать кеш-блок?

 public static String generateBodyResponse(String smsAnswerText) { 
String defaultval= "some default value which will be returned if your encod is wrong."; 
     try { 
      defaultval = URLEncoder.encode(smsAnswerText, "UTF-8"); 
     } catch (UnsupportedEncodingException e) { 
      e.printStackTrace(); 
     } 
     return defaultval; 

    } 

или сделать какой-то класс, как обертку вокруг этой функции:

public class URLEncoderDecorator { 
public static String encode(String smsAnswerText) { 
    try { 
     return URLEncoder.encode(smsAnswerText, "UTF-8"); 
    } catch (UnsupportedEncodingException e) { 
     e.printStackTrace(); 
    } 
    return smsAnswerText; 
} 

}

, а затем:

public static String generateBodyResponse(String smsAnswerText) { 
    return URLEncoderDecorator.encode(smsAnswerText, "UTF-8"); 
} 

Но оба sutiations не хорошо becouse это исключение необходимости чтобы понять, как это можно обработать, когда кодирование неверно. Вы должны точно понимать, что вы должны делать, когда приходит эта ситуация, потому что исключение подавляется.

+0

e.printStackTrace(); это плохая практика. Да, я могу поймать ecxeption в свой метод и добавить в Log this ecxeption. Но если я получаю ошибку, я возвращаю сообщение не в utf-8. – user5620472

+0

e.printStackTrace() не является практикой. Это шаблон, автогенерируемый идеей. :). или регистратор или другое. Я не понимаю ваши действия, когда вы ошибаетесь в кодировке. Что вы будете делать? если вы знаете, что можете поместить его в catch catch или поместить значение по умолчанию взамен. В противном случае вы должны бросить исключение и обработать его в другом месте, где ваше приложение понимает. –

0
import java.nio.charset.StandardCharsets; 
import org.apache.commons.codec.net.URLCodec; 

byte[] urlEscape(String s) { 
    return new URLCodec().encode(s.getBytes(StandardCharsets.UTF_8)); 
}