К сожалению, это невозможно.
Есть недостаток внутри 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;
// If the character is outside of ascii, write the
// numeric value.
output("&#");
output(String.valueOf((int)chars[counter]));
output(";");
}
break;
}
Эта логика никак не может контролироваться.
НО Если вам на самом деле нужна эта функциональность, вы можете сделать сумасшедшие вещи :
- копирование и вставка HTMLWriter источников в
HTMLWriterHack
(в одном пакете javax.swing.text.html
и переименование всех строк внутри)
- Замените перечисленные выше три
output
строки чем-то вроде output(String.valueOf(chars[counter]));
- копирование и вставка HTMLDocument источников в
HTMLDocumentHack
(в одном пакете javax.swing.text.html
, переименование всех строк внутри, расширение до HTMLDocument
и удаление методов столкновения)
- Используйте перечисленный ниже 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;
}
}
Хотя описанные выше шаги работают (я проверял это), я, конечно, не рекомендовал бы делать это.