很遗憾,这是不可能的。
javax.swing.text.html.HTMLWriter内部存在一个缺陷--它被硬编码为将任何非ASCII符号转换为其数字表示形式:
default:
if (chars[counter] < ' ' || chars[counter] > 127) {
if (counter > last) {
super.output(chars, last, counter - last);
}
last = counter + 1;
output("&#");
output(String.valueOf((int)chars[counter]));
output(";");
}
break;
}
这个逻辑无法以任何方式进行控制。
但是,如果您真的需要该功能,您可以做一些“疯狂的事情”:
1.将
HTMLWriter源代码复制并粘贴到
HTMLWriterHack
中(在相同的包
javax.swing.text.html
中,并重命名其中所有字符串)。
2.将上面列出的三个
output
行替换为类似于
output(String.valueOf(chars[counter]));
的内容。
3.将
HTMLDocument源代码复制并粘贴到
HTMLDocumentHack
中(在相同的包
javax.swing.text.html
中,重命名其中所有字符串,使其扩展
HTMLDocument
并删除冲突方法)。
4.使用下面列出的CustomEditorKit而不是HTMLEditorKit。
class CustomEditorKit extends HTMLEditorKit {
@Override
public void write(Writer out, Document doc, int pos, int len) throws IOException, BadLocationException {
HTMLWriterHack writer = new HTMLWriterHack(out, (HTMLDocumentHack) doc);
writer.write();
}
@Override
public Document createDefaultDocument() {
StyleSheet styles = getStyleSheet();
StyleSheet ss = new StyleSheet();
ss.addStyleSheet(styles);
HTMLDocumentHack doc = new HTMLDocumentHack(ss);
doc.setParser(getParser());
doc.setAsynchronousLoadPriority(4);
doc.setTokenThreshold(100);
return doc;
}
}
尽管上述步骤可行(我已测试),但我肯定不建议这样做。
charset=cp1251
而不是charset=UTF-8
。 - mKorbel