XMLドキュメントを読み込み、JNIを含むコンテンツをC++-DLLに渡して検証するアプリケーションを開発しています。
このタスクでは、JDomとJUniversalChardetを使用して、XMLファイルを正しいエンコーディングで解析しています。私のC++はconst char*
、XMLファイルの内容にaを受け入れ、「ISO-8895-15」のエンコーディングでそれを必要とします。そうでない場合、文字の形式が正しくないために例外がスローされます。
私の最初のアプローチは、出荷されたJDomのOutputFormatterを使用Charset.forName("ISO-8859-15")
し、JDomドキュメントを文字列にフォーマットするときに使用するように指示することでした。その後、この文字列のXMLのヘッダー部分は次のようになります。
<?xml version="1.0" encoding="ISO-8859-15"?>
問題は、それがまだJava文字列に格納されていることです。したがって、それが正しければUTF-16になります。
私のネイティブメソッドは次のようになります。
public native String jniApiCall(String xmlFileContents);
したがって、上記の文字列をJDomのOutputFormatterからこの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で完全に文字エンコードを行う方法はありますか?
ご協力いただきありがとうございます!マルコ