2011-09-13 4 views
2

ご覧のとおり、jbyte * strからutf文字列を取得します。文字列の各文字には2バイトの1バイトがありますか?AndroidでNtkのプログラミングでUTF文字列を取得する

ここ
JNIEXPORT jstring JNICALL 

Java_Prompt_getLine(JNIEnv *env, jobject obj, jstring prompt) { 

    char buf[128]; 
    const jbyte *str; 
    str = (env)->GetStringUTFChars(env, prompt, NULL); 

    if (str == NULL) { 
     return NULL;/OutOfMemoryError already thrown */ 
    } 

    printf("%s", str); 

    (*env)->ReleaseStringUTFChars(env, prompt, str); 
    /* We assume here that the user does not type more than * 127 characters */ 
    scanf("%s", buf); 

    return (*env)->NewStringUTF(env, buf); 
} 

答えて

1

str = (env)->GetStringUTFChars(env, prompt, NULL); 

あなたがシングルバイト文字のバッファを受け取ります。あなたも、ここのように、これを編集することがあります。

const char *str = (env)->GetStringUTFChars(env, prompt, NULL); 

GetStringUTFChars()const char *を返すように宣言されているため。

+0

いいえ! 'GetStringUTFChars'によって返される配列は、変更されたUTF-8エンコーディングのUnicode文字です。各文字は1〜6バイトをとります。 1文字あたり1バイトの文字セット/エンコーディングが必要な場合は、 'String.getBytes'オーバーロードまたは' Charset'クラスを使用します。 –

関連する問題