gpt4 book ai didi

java - 永远不会抛出 UnsupportedEncodingException

转载 作者:行者123 更新时间:2023-12-02 01:41:55 24 4
gpt4 key购买 nike

所以我尝试从字符串中使用 getBytes,并且我读到,如果它遇到一个字符,它无法转换为真实数据,它将抛出 UnsupportedEncodingException。我添加了 java.io 来提供异常,但是当我将其放入 try catch 语句中时,我得到,“UnsupportedEncodingException 无法到达的 catch block 。该异常永远不会从 try 语句主体中抛出”

这是我的具体构造。 myCharacterData 由外部程序提供,它只是一个字符串,但字符串很可能包含垃圾数据(因为我无法控制放入其中的内容)。

byte[] bytes = {0x40};
try {
bytes = myCharacterData.getBytes();
} catch (UnsupportedEncodingException saveError) {};

我错了吗?可以不抛出该异常吗?此处使用的正确异常是什么?

最佳答案

您误解了UnsupportedEncodingException的起源。

它是由将字符集的名称作为字符串的方法抛出的。例如,String.getBytes(String)抛出异常。

抛出该错误的原因是 JVM 不知道该名称引用的是哪个字符集。例如,如果您调用 "".getBytes("flibbly bibbly"),则(几乎肯定)会抛出异常,因为这不是已知字符集的名称。

请注意,这与字符串的内容无关。无论好坏(我说的是更坏),Java 在将字符编码到字节或从字节解码时不会抛出异常。

例如,"🍕" 无法在 ISO-8859-1 中表示;但你可以询问它的字节,然后得到 [63],即与 "?" 相同。

同样,[0xff] 不是 UTF-8 中的有效字节序列,但 new String(new byte[]{(byte)0xff}, "UTF-8") 产生 "�"。在这两种情况下都不会引发异常。

( Ideone demo )

没有声明由 String.getBytes()String.getBytes(Charset) 引发的异常。这是因为在调用这些之前您已经有一个 Charset 实例:

  • 在前一种情况下,因为它使用 JVM 默认字符集 - 如果该字符集不存在,JVM 将无法启动!
  • 在后一种情况下。因为你已经获得了字符集,例如来自Charset.forName(String) 。该方法抛出异常;但是一旦你得到结果,就不需要再次“查找”字符集,因此它不可能变得“未知”。

关于java - 永远不会抛出 UnsupportedEncodingException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54352433/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com