在我分配的项目中,原作者写了一个函数:
public String asString() throws DataException
{
if (getData() == null) return null;
CharBuffer charBuf = null;
try
{
charBuf = s_charset.newDecoder().decode(ByteBuffer.wrap(f_data));
}
catch (CharacterCodingException e)
{
throw new DataException("You can't have a string from this ParasolBlob: " + this, e);
}
return charBuf.toString()+"你好";
}
请注意,常量 s_charset 定义为:
private static final Charset s_charset = Charset.forName("UTF-8");
另请注意,我在返回字符串中硬编码了一个中文字符串。
现在当程序流到达这个方法时,它会抛出以下异常:
java.nio.charset.UnmappableCharacterException: Input length = 2
更有趣的是,硬编码的中文字符串会显示为“??” 如果我执行 System.out.println() 在控制台。
我认为这个问题在本地化方面非常有趣。我已经尝试将其更改为 Charset.forName("GBK");
但似乎不是解决方案。此外,我已将 Java 类的编码设置为“UTF-8”。
有没有专家有这方面的经验?你能分享一点吗?提前致谢!