comment coder et décoder emoji sous android?

j'ai utilisé https://github.com/rockerhieu/emojicon bibliothèque dans mon application. Quand je passe une chaîne de caractères statiques unicode dans mon code, l'emoji est visible, mais si j'envoie l'emoji au serveur php en utilisant le service web get normal et que je récupère la chaîne de caractères, cela ne fait qu'afficher la chaîne de caractères unicode dans mon application. les chaînes statiques et les chaînes récupérées par le serveur sont les mêmes si je les compare.

quelqu'un peut-il me dire ce que j'ai fait de mal dans ma demande? la même application est développée en IOS et ce qu'ils ont fait c'est qu'ils ont d'abord encodé la chaîne dans ASCII>UTF-8 tout en l'envoyant au serveur. puis ils décodent la chaîne de la même manière qu'ils envoient. Est-ce que quelqu'un peut me suggérer si cela serait compatible avec android aussi, si oui, comment puis-je faire cela.

25
demandé sur Vishnu 2014-08-01 10:25:39

6 réponses

On peut utiliser commons-lang(commons-lang-2.5.jar) bibliothèque pour l'encodage et le décodage des caractères unicode. Télécharger le fichier jar ici ou utiliser gradle: compile 'org.apache.commons:commons-lang3:3.4'.

Pour l'Encodage utiliser -StringEscapeUtils.escapeJava(String text) Cela peut être utilisé dans android EditText lors de l'appel getText méthode, où il encodera les caractères unicode correctement avant d'envoyer au serveur web.

Pour le Décodage utiliser -StringEscapeUtils.unescapeJava(String text) Cela peut être utilisé dans android TextView pour setText, où il décodera correctement les caractères unicode après avoir reçu la réponse du serveur web.



Ex:

EditText etEmojiEditText = new EditText(this);
etEmojiEditText.setText("TYPE SOMETHING IN EMOJI");

String toServer = etEmojiEditText.getText();
String toServerUnicodeEncoded = StringEscapeUtils.escapeJava(toServer);

String serverResponse = "SOME RESPONSE FROM SERVER WITH UNICODE CHARACTERS";
String fromServerUnicodeDecoded = StringEscapeUtils.unescapeJava(serverResponse);

pour information!--14 -- > utilisez aussi l'encodage et le décodage pour le côté service web. La chaîne encodée Unicode doit être décodée à partir du service web et la réponse du service web doit être encodée avant d'être envoyée aux clients. les tables du serveur doivent contenir utf8mb4 au lieu de utf8, car le caractère unicode les besoins de 4 octets par caractère. Par conséquent, unicode ne sera pas représenté en 3octets.

53
répondu Dulan Anuradha Bandara Dissana 2016-07-08 10:03:12

j'ai utilisé de la même bibliothèque que vous pour emoji. J'ai utilisé URLEncoder.coder (commentString, "UTF-8") pour encoder et de manière similaire, URLDecoder.décoder (codedcomment, "UTF-8") pour le décodage.

Fonctionne parfaitement pour moi. J'espère pour vous aussi.

11
répondu Neeraj Shukla 2015-02-28 20:31:36

j'utilise la même bibliothèque ... Vous n'avez pas besoin de coder ou d'échapper à l'emoji ... simplement getText().toString () fonctionnera.

Suivez les étapes

dans mysql, changez le champ collation en utf8mb4_unicode_ci (la compilation de ma base de données et de ma table est utf8_unicode_ci)

utilisé CODIGNITER PHP sur le serveur donc la configuration de la base de données

'char_set' => 'utf8mb4',
'dbcollat' => 'utf8mb4_unicode_ci'

puis dans Android utiliser textView.getText().toString(); puis envoyer le texte sans utiliser de code ou échapper

1
répondu Sabeer Mohammed 2016-03-29 11:31:46

vous pouvez encoder et décoder des emoticons sans utiliser de bibliothèques android si vous recevez unicode depuis votre serveur .

Exemple :

U+1F601 is 16 bit unicode.

Remplacer U+0x.

  int originalUnicode=0x1F601;
  textView.setText(getEmoticon(originalUnicode));


  public String getEmoticon(int originalUnicode) {
    return new String(Character.toChars(originalUnicode));
}
1
répondu Gowtham Kumar 2017-04-24 09:06:00

dans mon cas tout le texte dans le message disparaît après les symboles & et+, donc j'ai décidé de les remplacer avant l'envoi et après réception et cela fonctionne bien pour moi.

private String encodeMessage(String message) {
    message = message.replaceAll("&", ":and:");
    message = message.replaceAll("\+", ":plus:");
    return StringEscapeUtils.escapeJava(message);
}

private String decodeMessage(String message) {
    message = message.replaceAll(":and:", "&");
    message = message.replaceAll(":plus:", "+");
    return StringEscapeUtils.unescapeJava(message);
}
0
répondu Денис Шовгеня 2016-04-08 11:18:17

Emojis doit être codé et décodé . Vous devez envoyer le texte au serveur en encodant et afficher à nouveau dans le app en décodant la même chose. Le code est ci-dessous pour le cryptage et le décryptage.

public static String encodeEmoji (String message) {
try {
return URLEncoder.encode(message,
"UTF-8");
} catch (UnsupportedEncodingException e) {
return message;
}
}


public static String decodeEmoji (String message) {
String myString= null;
try {
return URLDecoder.decode(
message, "UTF-8");
} catch (UnsupportedEncodingException e) {
return message;
}
} 
0
répondu parambir singh 2017-11-06 12:57:56