使用Java将RTF转换为HTML - 调整Unicode

时间:2014-01-14 12:37:22

标签: java unicode rtf msg

我正在尝试使用JSP在我的Web应用程序中显示.msg文件(即Outlook电子邮件)。我正在使用解析器http://auxilii.com/msgparser/,它提取存储为RTF的电子邮件的正文内容(有时或总是 - 我没有检查过)

解析器本身带有两个从RTF转换为HTML的转换器,SimpleRTF2HTMLConverter(对我来说根本不起作用)和JEditorPaneRTF2HTMLConverter(它有效但不能正确转换希伯来文本但是只显示问号)

是否总体上调整了UniCode的JEditorPaneRTF2HTMLConverter代码(下面再现)(特别是希伯来语)?

  public class JEditorPaneRTF2HTMLConverter implements RTF2HTMLConverter {

        public String rtf2html(String rtf) throws Exception {
            JEditorPane p = new JEditorPane();
            p.setContentType("text/rtf");
            EditorKit kitRtf = p.getEditorKitForContentType("text/rtf");
            try {
                StringReader rtfReader = new StringReader(rtf);
                kitRtf.read(rtfReader, p.getDocument(), 0);
                kitRtf = null;
                EditorKit kitHtml = p.getEditorKitForContentType("text/html");
                Writer writer = new StringWriter();
                kitHtml.write(writer, p.getDocument(), 0, p.getDocument().getLength());
                return writer.toString();
            } catch (Exception e) {
                throw new Exception("Could not convert RTF to HTML.", e);
            }
        }

    }

举个例子。在原始电子邮件中,有一个电话号码 - 请注意两个希伯来语字母,它们是טלפון(电话)的缩写

טל: 02-9999999

在输入到此功能的RTF中,它看起来像这样

\pard\qr\plain{\f3\rtlch\lang13\cf2\fs20 \'E8\'EC': 02-9999999}\par

在从此函数输出的HTML中,它看起来像这样

<p class=default>
      <span style="color: #808080; font-size: 10pt; font-family: Arial">
        鬧: 02-9999999
      </span>
      <span style="color: #000000; font-size: 12pt; font-family: Times New Roman">

      </span>
    </p>

StackOverflow中出现闹的字符在NotePad ++中显示为xE8xEC(以反转字符显示),而在我的Web应用程序中,它呈现为??。 [注意希伯来语在我的应用程序中正确显示,如果我只是在没有格式化的情况下获取电子邮件的正文。]

0 个答案:

没有答案