在我指定的項目,原作者寫一個函數:Java中的中文字符串處理?
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
而且更interstingly,硬編碼字符串中國將顯示爲「?」在控制檯,如果我做一個System.out.println()。
我覺得這個問題在本地化方面很有意思。我試過將它改爲 Charset.forName(「GBK」);
但似乎不是解決方案。另外,我已經將Java類的編碼設置爲「UTF-8」。
任何專家都有這方面的經驗?你能分享一下嗎?提前致謝!
+1,但我不確定OP是否意味着eclipse的控制檯。如果你正在使用窗口,它更復雜。但這個討論會幫助你:http://stackoverflow.com/questions/388490/unicode-characters-in-windows-command-line-how – AlexR
它現在在我的控制檯上運行良好,謝謝。但我的最終目標是提取字符串並將其輸出到csv文件。它仍然顯示爲?在csv文件中。我已經設置了csv的編碼。 – Kevin
@Kevin閱讀[this](http://stackoverflow.com/a/16436195/1163607)。 – NINCOMPOOP