2011-07-12 16 views
1

JavaScriptのJNIメソッドを文字列引数の組み合わせで呼び出しています。 私はその文字列を取得するためにenv->GetStringChars(arg1, 0);を使用しています。 問題が発生することがあります。余分な特殊文字や文字列が切り捨てられることがあります。JNIへの文字列が余分な文字を取得する

+0

を見つけましたか?どのように文字列をJNI関数に渡しますか?他の言語は何ですか? – bezmax

+0

他の言語はC++ – marinnn

答えて

0

は最後に、私は、ソリューション 'ENV' はどのようなものです

const jchar* raw = env->GetStringChars(string, NULL); 
if (raw == NULL) 
    return NULL; 

wchar_t* wsz = new wchar_t[len+1]; 
memcpy(wsz, raw, len*2); 
wsz[len] = 0; 

env->ReleaseStringChars(string, raw); 

return wsz; 
+2

'wchar_t'が2バイトより大きいプラットフォームでは、これは正しく動作しません。 –

+0

これはWin Mobile 6で使用されます。 – marinnn

1

Javaでは、charsは16ビット文字(UTF-16エンコード)です。 C言語で平文であるchar*として扱うと、nulバイト(通常は文字列の終わりとして扱われます)やその他の特殊文字が表示されます。

恐らく、nul charを避けるUTFエンコーディングを使用するべきです。 UTFでエンコードされた特殊文字を処理する必要があります。

http://java.sun.com/docs/books/jni/html/objtypes.html

+0

JNI関数の 'UTF'バリアントの使用は、実際にはUTF-8ではない形式を使用するため、ほとんどの場合、悪い考えです。 Java文字列の内容をUTF-8文字列として取得したい場合は、 'jchar'データを取得してそれを自分で変換するか、Javaコードでその文字列をUTF-8の' byte'配列にエンコードしてアクセスする必要があります代わりに。 –

関連する問題