我的应用程序默认编码设置为"UTF-8"(在启动时使用-Dfile.encoding=UTF-8)。
当我使用String类方法“getBytes(String charsetName)”并将charset设置为“ISO-8859-1”时,似乎StringCoding.encode最终使用默认编码(UTF-8)而不是给定的编码(ISO-8859-1)。
由于某种未知原因,我可以逐步调试此方法,但无法检查内部元素的值(仅命名为arg0、arg1等的参数)。
在Java 1.6.10中,StringCoding.encode的写法如下:
由于某种未知原因,我可以逐步调试此方法,但无法检查内部元素的值(仅命名为arg0、arg1等的参数)。
在Java 1.6.10中,StringCoding.encode的写法如下:
static byte[] encode(String charsetName, char[] ca, int off, int len)
throws UnsupportedEncodingException
{
StringEncoder se = (StringEncoder)deref(encoder);
String csn = (charsetName == null) ? "ISO-8859-1" : charsetName;
if ((se == null) || !(csn.equals(se.requestedCharsetName())
|| csn.equals(se.charsetName()))) {
se = null;
try {
Charset cs = lookupCharset(csn);
if (cs != null)
se = new StringEncoder(cs, csn);
} catch (IllegalCharsetNameException x) {}
if (se == null)
throw new UnsupportedEncodingException (csn);
set(encoder, se);
}
return se.encode(ca, off, len);
}
通过逐步调试,我从未进入if块,因此没有使用我的ISO-8859-1字符集创建新的StringEncoder。最后,调用了Charset.defaultCharset()方法。
有什么线索吗? 谢谢