java 从韩语 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-8nn");
            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文件(

  {rtf1ansiansicpg1252deff0nouicompatdeflang1033deflangfe3079{fonttbl{f0fswissfprq2fcharset0 Calibri;}{f1fromanfprq2fcharset129 Batang;}{f2fnilfcharset0 Malgun Gothic Bold;}{f3fswissfprq2fcharset129 Malgun Gothic;}{f4fromanfprq2fcharset0 Times New Roman;}{f5fnilfcharset0 Calibri;}}
{colortbl ;red0green0blue0;}
{*generator Riched20 6.3.9600}viewkind4uc1 
pardnowidctlparcf1f0fs17lang1042 1.bf1'c0'fb'bf'ebf2  f1'b9'fc'c0'a7b0f2 . 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'e7f4 ,cf0fs24par
cf1f3fs17'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'c7cf0f4fs24par
cf1f3fs17'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'c2cf0f4fs24par
cf1f3fs17'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'cecf0f4fs24par
cf1f3fs17'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'd9cf0f5fs22lang9par
}

我使用RTF解析器套件来执行转换。以下是示例 RTF 文件中转换后的文本:

1.적용 범위. 본 최종 사용자 라이센스 계약(이하 "계약")은 동봉된 소프트웨어의 사용에 적용되며,귀하와및 자회사(총칭간에 체결된 별도 계약의구속을 받는 경우는 제외됩니다.귀하가 소프트웨어를 다운로드하거나, 복사하거나, 사용하는경우 본 계약에 동의하는 것으로 간주됩니다.HPE는 본 계약을 영어 이외의 특정 언어로번역하여 다음 위치에서 제공합니다

这当然看起来比你得到的输出更有希望!

您可以使用 RTF 解析器工具包来处理流:

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

或者为了方便起见,提供了一个转换器,它以字符串形式提供输出:

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

最新更新