Запись кириллицы в файл RDF с помощью библиотеки jena

У меня есть извлеченный кириллический контент с HTML-страницы в текстовый файл. Кириллица в этом файле в порядке. Затем я использую этот файл для создания RDF-файла с помощью Jena. Вот мой код:

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, кириллица выглядит так: РўРђРќСРљРћРџ-ВР?РўРћРАА. Может ли кто-нибудь помочь мне?


person vikifor    schedule 28.07.2013    source источник


Ответы (2)


Кодировка записи UTF-8 на устройстве записи вывода выглядит правильной, поэтому это говорит о том, что вы не читаете webContentFilePath с правильной кодировкой. В качестве диагностики вы можете попробовать просто прочитать этот файл, а затем записать его в обычный файл UTF-8 (без RDF). Я предполагаю, что вам нужно явно указать кодировку файла на br или убедиться, что очищенная веб-страница для начала записана в UTF-8.

person Ian Dickinson    schedule 28.07.2013
comment
Я был неправ. Сначала я забыл настройки кодировки utf-8 в OutputStreamWriter, а затем не перезагрузил файл в текстовом редакторе, которым открывал. Теперь в текстовом редакторе все в порядке, но в eclipse я все еще получаю эти странные символы. - person vikifor; 28.07.2013
comment
Итак, ваш файл в порядке, за исключением случаев, когда вы открываете его в Eclipse? Вы должны установить кодировку по умолчанию для Eclipse на UTF-8, см. eclipse.org /forums/index.php/t/29511 для некоторых предложений или других вопросов StackOverflow по аналогичной теме. - person Ian Dickinson; 28.07.2013

Возможно, вывод правильный, но вы не видите его правильно.

new FileReader(...) откроет файл с набором символов по умолчанию для платформы. Это не UTF-8 в Windows, поэтому, если он выглядит правильно, возможно, вы просматриваете его в чем-то другом, кроме UTF-8.

Jena пишет в UTF-8 по умолчанию и в этом случае.

Поэтому, когда вы записываете файл, вы не можете просматривать его так же, как вы просматривали ввод. Вам нужно просмотреть его с помощью программы просмотра, поддерживающей UTF-8.

person AndyS    schedule 29.07.2013