0

XMLドキュメントを読み込み、JNIを含むコンテンツをC++-DLLに渡して検証するアプリケーションを開発しています。

このタスクでは、JDomJUniversalChardetを使用して、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 xmlDataStringISO-8859-15の文字エンコードをどのように変更できますか?それとも、私がこれを行っている方法は正確にエレガントではありませんか?または、Javaで完全に文字エンコードを行う方法はありますか?

ご協力いただきありがとうございます!マルコ

4

2 に答える 2

0

メソッド(または)を使用して、必要な文字エンコードを使用して任意の配列をいつでもStringバイト配列に変換できます。byte[] getBytes(Charset charset)byte[] getBytes(String charsetName)

于 2011-03-30T15:31:47.673 に答える
0

Javaでは、おそらく使用できますmyString.getBytes("ISO-8859-15")。パラメータとして使用される文字エンコーディングを使用して Stringのバイト配列を取得します (この場合はISO-8859-15)。

そして、そのバイト配列を使用して、次のようなものCを取得します。std::string

std::string myNewstring ( reinterpret_cast< char const* >(myByteArray) )
于 2011-03-30T15:42:59.940 に答える