0

我将 HTML 页面中的西里尔文内容提取到文本文件中。西里尔字母在这个文件中是可以的。然后我使用这个文件使用 Jena 创建一个 RDF 文件。这是我的代码:

private void createRDFFile(String webContentFilePath) throws IOException {
    // TODO Auto-generated method stub
    Model model = ModelFactory.createDefaultModel();

    RDFWriter writer = model.getWriter("RDF/XML");
    writer.setProperty("showXmlDeclaration", "true");
    writer.setProperty("showDoctypeDeclaration", "true");
    writer.setProperty("tab", "8");
    Writer out = new BufferedWriter(new OutputStreamWriter(
            new FileOutputStream(rdfFilePath), "UTF8"));
    Resource resDest = null;
    Property hasTimeStart = model.createProperty(ns + "#hasTimeStart");
    Property distrName = model.createProperty(ns + "#distrName");
    Property moneyOneDir = model.createProperty(ns + "#moneyOneDir");
    Property moneyTwoDir = model.createProperty(ns + "#moneyTwoDir");
    Property hasTimeStop = model.createProperty(ns + "#hasTimeStop");

    BufferedReader br = new BufferedReader(new FileReader(
            webContentFilePath));
    String line = "";
    while ((line = br.readLine()) != null) {
        String[] arrayLine = line.split("\\|");
        resDest = model.createResource(ns + arrayLine[5]);
        resDest.addProperty(hasTimeStart, arrayLine[0]);
        resDest.addProperty(distrName, arrayLine[1]);
        resDest.addProperty(moneyOneDir, arrayLine[2]);
        resDest.addProperty(moneyTwoDir, arrayLine[3]);
        resDest.addProperty(hasTimeStop, arrayLine[4]);
    }
    br.close();
    model.write(System.out, "RDF/XML");
    writer.write(model, out, null);

}

当我打开 RDF 文件时,西里尔字母就像 РўР РђРќРЎРљРћРџ-Р'Р?ТОЛА。有人可以帮我吗?

4

2 回答 2

2

输出写入器上的 UTF-8 写入编码看起来是正确的,这表明您没有webContentFilePath使用正确的编码读取。作为诊断,您可以尝试仅读取该文件,然后将其写入普通的 UTF-8 文件(无 RDF)。我的猜测是,您必须明确将文件编码设置为 on br,或者确保将抓取的网页以 UTF-8 开头。

于 2013-07-28T10:29:21.863 回答
1

可能是输出正确,但您没有正确看到它。

new FileReader(...) 将使用平台默认字符集打开文件。这不是 Windows 上的 UTF-8,所以如果它看起来正确,那么您可能会以 UTF-8 以外的方式查看它。

Jena 默认使用 UTF-8 编写,在这种情况下也是如此。

因此,当您编写文件时,您无法以与查看输入相同的方式查看它。您需要使用支持 UTF-8 的查看器来查看它。

于 2013-07-29T13:03:46.420 回答