2015-03-02 1 views
1

J'utilise une bibliothèque (libcurl) qui demande une certaine page web avec du contenu arabe. quand j'obtiens la réponse de chaîne il a des caractères arabes et la réponse entière est encodée dans WINDOWS-1256.convertir std :: string en jstring codé en utilisant windows-1256

le problème est que les caractères arabes ne s'affichent pas correctement.

Y at-il un moyen de convertir une chaîne std :: en une chaîne jstring codée dans WINDOWS-1256?

par la façon dont j'ai essayé env->NewStringUTF(str.c_str()); et l'application s'est écrasé.

Répondre

1

Les chaînes Java utilisent UTF-16. JNI n'a pas de concept de codage charset autre que UTF-8 et UTF-16 (sauf si vous utilisez les appels JNI pour accéder directement à la classe Charset de Java, mais Java n'implémente qu'un petit sous-ensemble de charsets et Windows-1256 n'en fait pas partie sauf Java sous-jacent JVM l'implémente spécifiquement).

fonction de JNI NewStringUTF() nécessite UTF-8 entrées (et pas seulement la norme UTF-8, mais Java de modified UTF-8 spéciale) et retourne un UTF-16 codé JString.

Vous devez donc d'abord convertir les données arabes originales de Windows-1256 en UTF-8 (modifié) avant d'appeler le NewStringUTF(). Une meilleure option serait de convertir les données en UTF-16 directement, puis d'utiliser la fonction NewString() de JNI. Mais de toute façon, vous pouvez utiliser libiconv, ICU4JNI, ou toute autre bibliothèque Unicode de votre choix pour la conversion elle-même dans un sens ou dans l'autre.

+0

Merci pour votre aide –