【发布时间】:2011-09-18 13:57:45
【问题描述】:
我的应用默认编码设置为“UTF-8”(在启动时使用 -Dfile.encoding=UTF-8)。 当我使用带有 charset="ISO-8859-1" 的 String 类方法“getBytes(String charsetName)”时,似乎 StringCoding.encode 最终使用默认字符集 (UTF-8) 而不是给定的 (ISO-8859-1)。
由于未知原因,我可以在此方法上逐步调试,但我无法检查内部元素值(仅限名为 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() 方法。
有什么线索吗? 谢谢
【问题讨论】:
-
-Dfile.ecoding=UTF-8 实际上是这样拼写的吗?如果是这样,它应该是 -Dfile.encoding=UTF-8
-
您能否发布一个发生这种情况的完整示例 (SSCCE)?