![](/img/trans.png)
[英]UnsupportedEncodingException thrown when using Resin and Grails
[英]UnsupportedEncodingException is never thrown
因此,我尝试使用字符串中的getBytes,而且我读到,如果它碰到了一个字符,它将无法转换为真实数据,它将引发UnsupportedEncodingException。 我添加了java.io来提供异常,但是当我将其放入try catch语句中时,我得到“ UnsupportedEncodingException的Unreachable catch块。try语句主体永远不会抛出此异常”
这是我的确切构造。 myCharacterData由外部程序提供,它只是一个字符串,但是该字符串很可能包含垃圾数据(因为我无法控制要放入的数据)。
byte[] bytes = {0x40};
try {
bytes = myCharacterData.getBytes();
} catch (UnsupportedEncodingException saveError) {};
我错了吗? 可以不抛出该异常吗? 在这里使用的正确例外是什么?
您误解了UnsupportedEncodingException
的来源。
它由采用字符集名称作为String的方法抛出。 例如, String.getBytes(String)
引发异常。
抛出它的原因是,如果JVM不知道该名称所指向的字符集。 例如,如果您调用"".getBytes("flibbly bibbly")
,则(几乎可以肯定)将引发异常,因为这不是已知字符集的名称。
请注意,这与字符串的内容无关。 不管是好是坏(我说是更糟),Java在向/从字节编码或解码字符时不会抛出异常。
例如, "🍕"
不能在ISO-8859-1中表示; 但是您可以要求它的字节数,然后得到[63]
,即与"?"
相同 。
同样, [0xff]
在UTF-8中不是有效的字节序列,但是new String(new byte[]{(byte)0xff}, "UTF-8")
产生" "
。 在任何情况下都不会引发异常。
( Ideone演示 )
String.getBytes()
或String.getBytes(Charset)
没有声明抛出异常。 这是因为调用这些之前您已经具有一个Charset
实例:
Charset.forName(String)
获得了字符集。 该方法引发异常。 但是一旦获得了结果,就无需再次“查找”字符集,因此它就不可能变为“未知”。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.