jstring(JNI) à std::string(c++) avec des caractères utf8
Comment convertir jstring
(JNI) pour std::string
(c++) avec utf8
personnages?
c'est mon code. il a travaillé avec des caractères non-utf8, mais c'est le problème avec les caractères utf8.
std::string jstring2string(JNIEnv *env, jstring jStr){
const char *cstr = env->GetStringUTFChars(jStr, NULL);
std::string str = std::string(cstr);
env->ReleaseStringUTFChars(jStr, str);
return str;
}
Veuillez déplacer votre solution pour répondre à l'article
De toute façon, pour moi, votre code n'est pas une exception neutre
StackOverflow n'est pas un site de partage. Si vous avez quelque chose vaut la peine de partager, de le poster dans un QA format - poster une question que le code partagé ensuite les réponses.
De toute façon, pour moi, votre code n'est pas une exception neutre
StackOverflow n'est pas un site de partage. Si vous avez quelque chose vaut la peine de partager, de le poster dans un QA format - poster une question que le code partagé ensuite les réponses.
OriginalL'auteur Mr Jerry | 2017-01-24
Vous devez vous connecter pour publier un commentaire.
Après beaucoup de temps pour trouver une solution. j'ai été trouvé un moyen:
En java, un char unicode est encodé avec 4 octets (
utf16
). doncjstring
sera conteneur des caractèresutf16
.std::string
en c++ est essentiellement une chaîne d'octets, pas de caractères, donc si nous voulons passerjstring
deJNI
àc++
, nous avons convertirutf16
d'octets.dans le document JNI fonctions, nous avons 2 fonctions pour obtenir la chaîne de jstring:
GetStringUTFChars
, il sera de retour une modifié utf8.GetStringChars
sera de retour jbyte *, nous vous lu char code de jbytes et la convertir en char en c++c'est ma solution (bien travaillé avec
ascii
etutf8
caractères):OriginalL'auteur Mr Jerry
Cela fonctionne bien. Lui donner un essai.
OriginalL'auteur Nikhil Tambe
explication est ici:
http://www.club.cc.cmu.edu/~cmccabe/blog_jni_flaws.html
https://developer.android.com/training/articles/perf-jni (Région appels)
OriginalL'auteur Isaak Osipovich Dunayevsky