簡體   English   中英

java從韓國RTF中提取文本

[英]java Extracting Text from a korean RTF

從EULA文件中提取文本以使用jsp向用戶顯示。 RTF文件中的文本如下:

적용 범위. 본 최종 

但是,當我提取文本並將其打印到控制台時,最終會得到不同的格式,如下所示:

Àû¿ë ¹üÀ§. º» ÃÖ

我認為它與編碼有關,但是包含英語,西班牙語和俄語字符的文件可以正常工作。 為什么顯示這些奇怪的字符,以及如何獲得預期的輸出?

private static String rtfToHtml(Reader rtf, String contentType) throws IOException
    {
        final JEditorPane p = new JEditorPane();
        p.setContentType("text/rtf");
        EditorKit kitRtf = p.getEditorKitForContentType("text/rtf");
        try
        {
            kitRtf.read(rtf, p.getDocument(), 0);
            kitRtf = null;
            final EditorKit kitHtml = p.getEditorKitForContentType(contentType);
            final Writer writer = new StringWriter();
            //          writer.write("Content-Type: text/plain; charset=utf-8\n\n");
            kitHtml.write(writer, p.getDocument(), 0, p.getDocument().getLength());
            // Utf-8 encoding the string 

            return writer.toString();
        }
        catch (final BadLocationException e)
        {
            e.printStackTrace();
        }
        return null;
    }

public static String extractEulaToPlain(String eulaDocumentLocation) throws FileNotFoundException, IOException
    {
        final FileInputStream is = new FileInputStream(eulaDocumentLocation);
        final InputStreamReader isr = new InputStreamReader(is, "UTF-8");
        final BufferedReader buffReader = new BufferedReader(isr);

        final String plain = rtfToHtml(buffReader, "text/plain");

編輯:(示例rtf文件)

  {\rtf1\ansi\ansicpg1252\deff0\nouicompat\deflang1033\deflangfe3079{\fonttbl{\f0\fswiss\fprq2\fcharset0 Calibri;}{\f1\froman\fprq2\fcharset129 Batang;}{\f2\fnil\fcharset0 Malgun Gothic Bold;}{\f3\fswiss\fprq2\fcharset129 Malgun Gothic;}{\f4\froman\fprq2\fcharset0 Times New Roman;}{\f5\fnil\fcharset0 Calibri;}}
{\colortbl ;\red0\green0\blue0;}
{\*\generator Riched20 6.3.9600}\viewkind4\uc1 
\pard\nowidctlpar\cf1\f0\fs17\lang1042 1.\b\f1\'c0\'fb\'bf\'eb\f2  \f1\'b9\'fc\'c0\'a7\b0\f2 . \f3\'ba\'bb \'c3\'d6\'c1\'be \'bb\'e7\'bf\'eb\'c0\'da \'b6\'f3\'c0\'cc\'bc\'be\'bd\'ba \'b0\'e8\'be\'e0(\'c0\'cc\'c7\'cf "\'b0\'e8\'be\'e0")\'c0\'ba \'b5\'bf\'ba\'c0\'b5\'c8 \'bc\'d2\'c7\'c1\'c6\'ae\'bf\'fe\'be\'ee\'c0\'c7 \'bb\'e7\'bf\'eb\'bf\'a1 \'c0\'fb\'bf\'eb\'b5\'c7\'b8\'e7\f4 ,\cf0\fs24\par
\cf1\f3\fs17\'b1\'cd\'c7\'cf\'bf\'cd\'b9\'d7 \'c0\'da\'c8\'b8\'bb\'e7(\'c3\'d1\'c4\'aa\'b0\'a3\'bf\'a1 \'c3\'bc\'b0\'e1\'b5\'c8 \'ba\'b0\'b5\'b5 \'b0\'e8\'be\'e0\'c0\'c7\cf0\f4\fs24\par
\cf1\f3\fs17\'b1\'b8\'bc\'d3\'c0\'bb \'b9\'de\'b4\'c2 \'b0\'e6\'bf\'ec\'b4\'c2 \'c1\'a6\'bf\'dc\'b5\'cb\'b4\'cf\'b4\'d9. \'b1\'cd\'c7\'cf\'b0\'a1 \'bc\'d2\'c7\'c1\'c6\'ae\'bf\'fe\'be\'ee\'b8\'a6 \'b4\'d9\'bf\'ee\'b7\'ce\'b5\'e5\'c7\'cf\'b0\'c5\'b3\'aa, \'ba\'b9\'bb\'e7\'c7\'cf\'b0\'c5\'b3\'aa, \'bb\'e7\'bf\'eb\'c7\'cf\'b4\'c2\cf0\f4\fs24\par
\cf1\f3\fs17\'b0\'e6\'bf\'ec \'ba\'bb \'b0\'e8\'be\'e0\'bf\'a1 \'b5\'bf\'c0\'c7\'c7\'cf\'b4\'c2 \'b0\'cd\'c0\'b8\'b7\'ce \'b0\'a3\'c1\'d6\'b5\'cb\'b4\'cf\'b4\'d9. HPE\'b4\'c2 \'ba\'bb \'b0\'e8\'be\'e0\'c0\'bb \'bf\'b5\'be\'ee \'c0\'cc\'bf\'dc\'c0\'c7 \'c6\'af\'c1\'a4 \'be\'f0\'be\'ee\'b7\'ce\cf0\f4\fs24\par
\cf1\f3\fs17\'b9\'f8\'bf\'aa\'c7\'cf\'bf\'a9 \'b4\'d9\'c0\'bd \'c0\'a7\'c4\'a1\'bf\'a1\'bc\'ad \'c1\'a6\'b0\'f8\'c7\'d5\'b4\'cf\'b4\'d9\cf0\f5\fs22\lang9\par
}

我使用RTF分析器套件執行轉換。 這是示例RTF文件中轉換后的文本:

1.적용。 계약사센계약이계약스계약(이은“하”)소프트웨어의용에용에적용되며적용되며총칭간에총칭간에총칭간에경우는총칭간에총칭간에외됩니외됩니경우는경우는외됩니외됩니운운운운운운운운 ,HPE는외의외의외의언어언어음음음음음음음음것으것으것으것으것으

這肯定比您獲得的輸出更有希望!

您可以使用RTF Parser Kit處理流:

new StreamTextConverter().convert(new RtfStreamSource(inputStream), outputStream, "UTF-8");

或者為了方便起見,提供了一個轉換器,該轉換器以字符串形式提供輸出:

StringTextConverter converter = new StringTextConverter();
converter.convert(new RtfStreamSource(inputStream));
String extractedText = converter.getText();

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM