繁体   English   中英

此字符串构造函数(JAVA)的问题

[英]Problem with this String constructor (JAVA)

我正在尝试使用构造函数

public String(byte[] bytes,
              Charset charset)

此处详细介绍。 我正在使用它将字节数组转换为 ASCII。 这是代码

String msg = new String(raw, "US-ASCII");

不幸的是,这给了我:

error: unreported exception UnsupportedEncodingException; must be caught or declared to be thrown
    String msg = new String(raw, "US-ASCII");
                 ^

尝试不同的配置,例如“String msg = new String(data, 0, data.length, "ASCII");" 也不行。

这不再是一个可用的构造函数,还是我做错了什么?

byte[] raw = new byte[]{};
String msg = new String(raw, StandardCharsets.US_ASCII);

解释

问题是您可能正在编写new String(raw, "nonsensefoobar")这显然是无意义的。

因此 Java 迫使你告诉它你想如何处理这种编码方案不存在的例外情况。 通过尝试捕获它或通过声明throws

public void myMethod(){
    ...
    try {
        String msg = new String(raw, "US-ASCII");
    ...
    } catch (UnsupportedEncodingException e) {
        ... // handle the issue
    }
    ...
}

// or

public void myMethod() throws UnsupportedEncodingException {
    ...
    String msg = new String(raw, "US-ASCII");
    ...
}

这是一个超级普通和常见的异常情况,我建议学习 exceptions


更好的解决方案

除了将编码方案指定为字符串然后处理异常,您可以使用构造函数的另一个重载,它接受 Java 知道它们存在的预定义方案,因此它不会因异常而困扰您:

String msg = new String(raw, StandardCharsets.US_ASCII);

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM