it-swarm.com.de

wie man Emoji in Android codiert und decodiert?

Ich habe in meiner Anwendung https://github.com/rockerhieu/emojicon library verwendet. Wenn ich eine statische Unicode-Zeichenfolge in meinem Code übergebe, ist das Emoji sichtbar. Wenn ich jedoch das Emoji mithilfe des regulären Webservices zum PHP-Server schicke und die Zeichenfolge wiederaufrufe, wird die Unicode-Zeichenfolge in meiner Anwendung angezeigt. Sowohl die statischen als auch die vom Server abgerufenen Zeichenfolgen sind beim Vergleich identisch.

Kann mir jemand sagen, was ich in meiner Bewerbung falsch gemacht habe. Dieselbe Anwendung wurde in IOS entwickelt. Sie verschlüsseln die Zeichenfolge zunächst in ASCII> UTF-8, während sie an den Server . senden. Dann dekodieren sie die Zeichenfolge auf dieselbe Weise wie sie senden. Kann mir jemand vorschlagen, WENN dies auch mit Android kompatibel wäre, wenn ja, wie kann ich das tun?.

26
Vishnu

Wir können die Bibliothek commons-lang (commons-lang-2.5.jar) zum Kodieren und Dekodieren der Unicode-Zeichen verwenden. Laden Sie die JAR-Datei hier herunter oder verwenden Sie Gradle: compile 'org.Apache.commons:commons-lang3:3.4'.

Für die Kodierung verwenden Sie - StringEscapeUtils.escapeJava(String text) Diese Funktion kann in der Android-Variable EditText verwendet werden, wenn Sie die Methode getText aufrufen. Dort werden die Unicode-Zeichen vor dem Senden an den Webserver ordnungsgemäß codiert.

Für die Dekodierung verwenden Sie - StringEscapeUtils.unescapeJava(String text) Dies kann in Android TextView bis setText verwendet werden, wo die Unicode-Zeichen nach Erhalt der Antwort vom Webserver ordnungsgemäß decodiert werden.


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);

FYI Verwenden Sie die Kodierung und Dekodierung auch für die Webservice-Seite. Eine Unicode-codierte Zeichenfolge sollte vom Webdienst decodiert werden, und die Antwort des Webdiensts sollte vor dem Senden an Clients codiert werden. Server-Tabellen sollten utf8mb4 anstelle von utf8 enthalten, da Unicode-Zeichen 4 Byte pro Zeichen benötigen. Daher wird Unicode nicht in 3 Byte dargestellt.

Ich habe dieselbe Bibliothek wie Sie für emoji ..__ verwendet. Ich habe URLEncoder.encode (commentString, "UTF-8") zur Kodierung verwendet, und für die Dekodierung.

Funktioniert perfekt für mich. Hoffentlich auch für dich.

11
Neeraj Shukla

Sie können Emoticons kodieren und dekodieren, ohne Bibliotheken in .__ zu verwenden. Android, wenn Sie Unicode von Ihrem Server erhalten.

Beispiel:

U+1F601 is 16 bit unicode.

Ersetzen Sie U+ durch 0x.

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


  public String getEmoticon(int originalUnicode) {
    return new String(Character.toChars(originalUnicode));
}
1
Gowtham Kumar

Ich verwende dieselbe Bibliothek ... Sie müssen das Emoji nicht codieren oder entkommen ... einfach getText (). ToString () funktioniert.

Folge den Schritten

Ändern Sie in mysql die Feldkollatierung in utf8mb4_unicode_ci (meine Datenbank- und Tabellensortierung lautet utf8_unicode_ci)

Verwendet PHP Codigniter auf dem Server, also die Datenbankkonfiguration 

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

Dann senden Sie im Android-Modus textView.getText().toString(); den Text, ohne Kodierung oder Escape-Code zu verwenden

1
Sabeer Mohammed

Emojis muss codiert und decodiert werden. Sie sollten den Text durch Kodierung an den Server senden und in app erneut anzeigen, indem Sie ihn decodieren. Der Code ist unten für die Ver- und Entschlüsselung.

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
parambir singh

In meinem Fall verschwindet der gesamte Text in der Nachricht nach den Symbolen & und +, daher habe ich mich entschlossen, sie vor dem Senden und nach dem Empfangen zu ersetzen, und es funktioniert gut für mich.

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);
}

Konvertieren Sie Unicode in Emojis im gesamten Inhalt, ohne eine Bibliothek zu verwenden.

private String convertEmoji(String content) {
    content = content.replaceAll("U\\+", "0x");
    String keyword = "0x";

    int index = content.indexOf(keyword);
    int spaceIndex;

    while (index >=0){
        spaceIndex = content.indexOf(" ", index);

        if(spaceIndex > index) {
            String emoji = content.substring(index, spaceIndex);
            content = content.replaceAll(emoji, getEmoticon(Integer.decode(emoji)));
        }
        index = content.indexOf(keyword, index+keyword.length());
    }

    return content;
}
0
Melih Toksari