gpt4 book ai didi

java - UTF-8 的字符串构造函数是否已损坏?

转载 作者:行者123 更新时间:2023-12-01 18:14:43 24 4
gpt4 key购买 nike

我有以下代码,它从缓冲区加载一个以空字符结尾的多字节字符串。它名义上将数据解释为 UTF-8,但如果转换失败,它会将数据解释为 ISO-8859-1。这是代码:

@Override
public String format(String date_format, boolean use_locale, int precision)
{
String rtn = null;
int len = 0;
for(int i = 0; i < max_len; ++i)
{
if(storage[storage_offset + i] != 0)
++len;
else
break;
}
try
{
rtn = new String(storage, storage_offset, len, "UTF-8");
}
catch(UnsupportedEncodingException e1)
{
try
{
rtn = new String(storage, storage_offset, len, "ISO-8859-1");
}
catch(UnsupportedEncodingException e2)
{ }
}
return rtn;
}

我的 Intent 是,如果 UTF-8 的字符串解码失败,我们可以回退。这取决于抛出的 UnsupportedEncodingException。我对此代码进行了测试,该代码在没有预期的 UTF-8 模式的情况下传递扩展字符(大于 128 的代码)。我发现异常没有被抛出,并且转换后的字符串显示未知的字形。我的问题是标准库实现是否有任何更改会导致不抛出异常?

最佳答案

如果字符集本身不受支持(即,您指定了一个字符集而系统无法识别该名称),则抛出UnsupportedEncodingException - 如果字节编码不正确,则不会抛出。请注意,采用 java.nio.charset.Charset 的相应构造函数不会抛出该异常(因为没有名称可以映射到 Charset) >,因此不可能存在映射不存在的情况)。

String(byte[], int, int, String) 的文档指定行为(即未指定:))并建议修复:

The behavior of this constructor when the given bytes are not valid in the given charset is unspecified. The CharsetDecoder class should be used when more control over the decoding process is required.

关于java - UTF-8 的字符串构造函数是否已损坏?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30385850/

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