2017-02-16 6 views
0

文字列をUTF-8に変換する必要があります。今、私のコードでは、私はこの持っている:エラーをキャッチせずに文字列をUTF-8に変換する方法

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

が、エンコード方式のスロー例外UnsupportedEncodingException

を私は書き換え:sb.append(smsAnswerText)this

を書くbecouseと私は間違ってtуxt-unreadable文字を持っている

次にI試しましたnew String(smsAnswerText.getBytes(),StandardCharsets.UTF_8) このメソッドも例外をスローしますUnsupportedEncodingException

スティングをUnsupportedEncodingExceptionなしでString + UTF-8に変換するにはどうすればよいですか?私が必要

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

実行時に例外がスローされるか、試行された例外のためにラップする必要があることを意味しますか? – 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

@マーク:ありがとう。私は今使用することを学んでいます。 :) – 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"); 
} 

をしかし、この例外が必要であるbecouse両方sutiationsが良いものではありませんエンコーディングが間違っているときにどのように処理できるかを理解する。このような状況が発生したときに、何がすべきかを正確に理解しなければなりません。

+0

e.printStackTrace();悪い習慣です。はい、私は自分のメソッドにecxeptionをキャッチし、このecxeptionをログに記録することができます。しかし、私がエラーを取得した場合、私はutf-8ではなくメッセージを返します。 – user5620472

+0

e.printStackTrace()は習慣ではありません。これはideによって自動生成されたテンプレートです。 :)。またはロガーまたはその他のものである。 エンコーディングが間違っていると、あなたの行動を理解できません。あなたは何をしますか?あなたが知っていれば、それをキャッチブロックに入れたり、デフォルト値を返すことができます。それ以外の場合は、例外をスローして、アプリが理解できる他の場所で処理する必要があります。 –

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)); 
} 
関連する問題