从String.getBytes(“UTF-8”)处理UnsupportedEncodingException的推荐方法

在库方法中调用String.getBytes(“UTF-8”)时,处理UnsupportedEncodingException的推荐方法是什么?

如果我正确地阅读http://docs.oracle.com/javase/6/docs/technotes/guides/intl/encoding.doc.html,UTF-8编码应始终可用,这让我相信没有将此exception传递给库的使用者的原因(即,向方法签名添加throws子句)。 似乎任何使UTF-8编码设施不可用的故障模式都是灾难性的,导致我编写这个处理程序:

  try { .... return "blah".getBytes("UTF-8"); } catch (UnsupportedEncodingException e) { // we're assuming UTF-8 encoding is always available. // see // http://docs.oracle.com/javase/6/docs/technotes/guides/intl/encoding.doc.html e.printStackTrace(); return null; //prevent compile-time "method must return a result" errors } 

是否存在此代码段无法解决的故障模式?

你知道我在做什么吗?

 return "blah".getBytes( Charset.forName( "UTF-8" ) ); 

这个不会抛出一个检查过的exception。

更新 :自Java 1.7以来,我们有StandardCharsets 。

 return "blah".getBytes( StandardCharsets.UTF_8 ); 

我试图弄清楚UTF-8是否始终可用时遇到了这个问题。 谢谢你的链接。

我同意在使用保证可用的特定字符集进行编码和解码时,不需要抛出已检查的exception。 如果字符集是传入的变量,我可能会抛出UnsupportedEncodingException。

这就是我在类似的Android代码中所做的事情:

 public static String encode(String input) { try { return URLEncoder.encode(input, CharEncoding.UTF_8); } catch (UnsupportedEncodingException e) { throw new RuntimeException(e); } } 

CharEncoding.UTF_8只是Apache Commons的“UTF-8”字符串常量。

判断Mental的建议使用StandardCharsets.UTF_8非常棒,但对于我们这些进行Android开发的人来说,它仅适用于SDK 19(KitKat)及更高版本。