我有以下代码从缓冲区加载一个空终止的多字节字符串。它名义上将数据解释为UTF-8,但如果该转换失败,则将数据解释为ISO-8859-1。这里是代码:UTF-8的字符串构造函数是否被破坏?
@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;
}
我的意图是,如果字符串解码失败的UTF-8,我们可以回落。这取决于抛出的UnsupportedEncodingException。我已经运行了这个代码的测试,它传递扩展字符(代码大于128),没有预期的UTF-8模式。我发现的是,异常不会被抛出,并且转换的字符串显示未知的字形。我的问题是标准库实现是否有任何更改会导致异常不被抛出?
请提供MCVE。 –