Я разрабатываю приложение, которое читает XML-документ и передает содержимое с помощью JNI в C++-DLL, которая его проверяет.
Для этой задачи я использую JDom и JUniversalChardet для анализа XML-файла в правильной кодировке. Мой С++ принимает const char*
для содержимого XML-файла и нуждается в нем в кодировке «ISO-8895-15», иначе он выдаст исключение из-за искаженных символов.
Мой первый подход состоял в том, чтобы использовать поставляемый OutputFormatter JDom и указать ему использовать Charset.forName("ISO-8859-15")
при форматировании документа JDom в строку. После этого часть заголовка XML в этой строке говорит:
<?xml version="1.0" encoding="ISO-8859-15"?>
Проблема в том, что он по-прежнему хранится в строке Java и, следовательно, в UTF-16, если я правильно понял.
Мой собственный метод выглядит примерно так:
public native String jniApiCall(String xmlFileContents);
Поэтому я передаю вышеупомянутую строку из OutputFormatter JDom в этот JNI-метод. По-прежнему все UTF-16, верно?
В методе JNI-C++ я получаю доступ к xmlFileContents String
с помощью
const string xmlDataString = env->GetStringUTFChars(xmlFileContents, NULL);
Итак, теперь я получил вышеупомянутую строку в UTF-16 или UTF-8? И мой следующий вопрос: как я могу изменить кодировку символов std::string xmlDataString
на ISO-8859-15? Или то, как я это делаю, не совсем элегантно? Или есть способ полностью выполнить кодировку символов в Java?
Спасибо за вашу помощь! Марко