【发布时间】:2015-05-21 23:10:37
【问题描述】:
我有以下代码从缓冲区加载空终止的多字节字符串。它名义上将数据解释为 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;
}
我的意图是,如果 UTF-8 的字符串解码失败,我们可以回退。这取决于抛出的 UnsupportedEncodingException。我已经对此代码进行了测试,该代码通过了扩展字符(大于 128 的代码)而没有预期的 UTF-8 模式。我发现没有抛出异常,并且为转换后的字符串显示了未知的字形。我的问题是标准库实现是否有任何更改会导致异常不被抛出?
【问题讨论】:
-
请提供 MCVE。