在我分配的项目中,原始作者编写了一个函数:
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”。
有专家在这方面有经验吗?你能分享一点吗?提前致谢!
更有趣的是,硬编码的中文字符串将显示为“ ??”。在控制台上,如果我执行System.out.println()。
System.out执行从UTF-16字符串到默认JRE字符编码的转码操作。如果这不匹配,则接收字符数据的设备使用的编码将被破坏。因此,应将控制台设置为使用正确的字符编码(UTF-8)来正确呈现中文字符。
如果您使用的是eclipse,则可以通过以下方式更改控制台编码:
运行配置->通用->编码(从下拉列表中选择UTF-8)
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句