Есть ли у JEditorPane проблемы с Charset при отображении HTML? - PullRequest
3 голосов
/ 07 октября 2008

У меня есть следующий код:

<code>import javax.swing.JEditorPane;
import javax.swing.JFrame;
import javax.swing.JScrollPane;
import javax.swing.ScrollPaneConstants;


public class ScratchPad {

    public static void main(String args[]) throws Exception {
        String html ="<html>"+
"<head>"+
"<meta http-equiv=\"Content-Type\" content=\"text/html; charset=ISO-8859-1\"/>"+ // this is the problem right here
"<title>Error 400 BAD_REQUEST</title>"+
"</head>"+
"<body>"+
"<h2>HTTP ERROR: 400</h2><pre>BAD_REQUEST
"+ "

RequestURI = нуль

" + "

Powered от пристани: //

"+ "" + ""; JFrame f = новый JFrame (); JEditorPane editor = new JEditorPane (); editor.setEditable (false); editor.getDocument (). putProperty ("Ignore-Charset", "true"); // эта строка не имеет значения в любом случае editor.setContentType ("text / html"); editor.setText (html); f.add (новый JScrollPane (редактор, ScrollPaneConstants.VERTICAL_SCROLLBAR_AS_NEEDED, ScrollPaneConstants.HORIZONTAL_SCROLLBAR_NEVER)); f.pack (); f.setVisible (true); } }

Если вы запустите его, вы заметите, что рамка пуста. Однако, если я удалю «; charset = ISO-8859-1» из метатега, HTML-код отобразится. Любые идеи, почему и что я могу сделать, чтобы предотвратить это (кроме ручного взлома строки HTML, которую я не могу контролировать ...).

Edit # 1 - putProperty ("Ignore-Charset", "true"), к сожалению, не имеет значения.

Ответы [ 2 ]

14 голосов
/ 14 сентября 2009

Используйте следующую строку перед setText и после setContentType.

editor.getDocument().putProperty("IgnoreCharsetDirective", Boolean.TRUE);

Это одна из мистических недокументированных возможностей. setContentType создает новый документ, на который он не действует, если вы его установили ранее.

0 голосов
/ 06 ноября 2008

Когда я запускаю код, я вижу текст HTML только при удалении строки meta . Возможно, это как-то связано с настройками персонажа системы, в которой он работает.

...