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註釋是available.By使用此您可以避免拋出並拋出關鍵字

+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這個ecxeption。但是,如果我得到錯誤,我不會在utf-8中返回消息。 – user5620472

+0

e.printStackTrace()不是一種做法。它是由ide自動生成的模板。 :)。或記錄器或其他。 當你編碼錯誤時,我不理解你的行爲。你會怎麼做?如果你知道你可以把它放在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)); 
} 
相關問題