文件java中的波兰字符

时间:2017-08-03 09:38:14

标签: java encoding character-encoding

我在我的项目params['_source']['companies']['58f99f99ba63d10006291b59']['sentiment']中使用。我读了docx文件并将其转换为html。我想在文件中写入结果,但我有问题。 FileOutputStream不会写波兰字符。例如,而不是

Jsoup 我有

Wiersz nad którym znajduje się aktualnie kursor myszy

这是我解析html的方法:

Wiersz nad kt?rym znajduje si� aktualnie kursor myszy . 

在这里我写信给文件:

public String parseHTML(String html) {
    int i = 0;
    Document doc = Jsoup.parse(html);
    doc.outputSettings().syntax(Document.OutputSettings.Syntax.xml).charset("ISO-8859-2");
    for (Element element : doc.select("img[src]")) {
        element.attr("src", "resources/images/img" + i + ".png");
        i++;
    }
    return doc.toString();
}

这是我阅读文件的方法:

public void saveHelpFile(byte[] document) throws IOException {
    File file = new File(
            "path/to/file");
    String s = new String(document, "ISO-8859-2");
    PrintWriter writer = new PrintWriter(file, "ISO-8859-2");
    try {
        writer.write(s);
    } finally {
        writer.close();
    }
}

1 个答案:

答案 0 :(得分:0)

您的字符串很好,它包含正确的信息,但是当您写入文件时,您使用字符集“ISO-8859-2”编写它。文件不保留它写入的字符集信息。无论应用程序读取文件,都应该知道或猜测文件的字符集。这就是为什么总是建议用UTF-8或UTF-16编写文件。因此,在您的代码中,就获取String而言,不需要进行任何更改。就在您写入文件时,将字符集更改为UTF-8。它可以工作的原因是你“告诉”你的字符串,你的字节代表charset“ISO-8859-2”中的信息,应该被解释为这样。所以String是正确构建的。但是内部java将所有Srtings保留在Unicode字符集(UCS-2)中。因此,现在您可以将String写入任何有效字符集中的任何其他目标(在您的情况下为文件),Java将知道如何编写它。因此,在您的情况下,您可以用“ISO-8859-2”或“UTF-8”或任何其他支持波兰语的字符集(例如“UTF-16”)编写它,因为UTF-8通常被接受为事实上的标准建议使用它