Подтвердить что ты не робот

Как кодировать и декодировать emoji в android?

Я использовал https://github.com/rockerhieu/emojicon в моем приложении. Когда я передаю старую строку юникода в моем коде, emoji видна, но если я отправлю emoji на php-сервер, используя регулярный get webservice и извлекую строку, тогда он просто покажет строку unicode в моем приложении. как статические, так и загруженные сервером строки одинаковы, если я сравниваю.

Кто-нибудь может сказать мне, что я сделал в своем приложении. одно и то же приложение разработано в IOS, и они сделали это, сначала кодируя строку в ASCII > UTF-8 при отправке на сервер. то они декодируют строку так же, как и они. Может кто-нибудь предложить мне, если бы это было бы совместимо с android также. Если да, то как я могу это сделать.

4b9b3361

Ответ 1

Мы можем использовать библиотеку commons-lang (commons-lang-2.5.jar) для кодирования и декодирования символов Юникода. Загрузите файл jar здесь или используйте gradle: compile 'org.apache.commons:commons-lang3:3.4'.

Для кодирования используйте - StringEscapeUtils.escapeJava(String text) Это можно использовать в android EditText при вызове метода getText, где он будет правильно кодировать символы Юникода перед отправкой на веб-сервер.

Для декодирования используйте - StringEscapeUtils.unescapeJava(String text) Это можно использовать в android TextView to setText, где он правильно декодирует символы Юникода после получения ответа от веб-сервера.


Пример:

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 Используйте кодировку и декодирование для веб-службы. Строка с кодировкой Unicode должна быть декодирована из веб-службы, а ответ от веб-службы должен быть закодирован перед отправкой клиентам. Таблицы сервера должны содержать utf8mb4 вместо utf8, потому что для символа Unicode требуется 4 байта на символ. Поэтому unicode не будет представлен в 3 байта.

Ответ 2

Я использовал ту же библиотеку, что и для emoji. Я использовал URLEncoder.encode(commentString, "UTF-8" ) для кодирования и аналогичным образом, URLDecoder.decode(encodedComment, "UTF-8" ) для декодирования.

Прекрасно подходит для меня. Надеюсь, вы тоже.

Ответ 3

Я использую ту же библиотеку... Вам не нужно кодировать или удалять emoji... просто getText(). toString() будет работать.

Выполните шаги

В mysql измените сопоставление полей на utf8mb4_unicode_ci (моя база данных и сопоставление таблиц - utf8_unicode_ci)

Используется PHP Codigniter на сервере, поэтому конфигурация базы данных

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

Затем в Android используйте textView.getText().toString();, затем отправьте текст без использования какого-либо кодирования или выхода

Ответ 4

Вы можете кодировать и декодировать смайлики без использования каких-либо библиотек в android, если вы получаете unicode с вашего сервера.

Пример:

U+1F601 is 16 bit unicode.

Замените U+ на 0x.

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


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

Ответ 5

В моем случае весь текст в сообщении исчезает после символов и +, поэтому я решил заменить их перед отправкой и после получения, и это хорошо работает для меня.

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

Ответ 6

Emojis необходимо закодировать и декодировать. Вы должны отправить текст на сервер с помощью кодирования и снова показать в app, декодируя его. Ниже приведен код для шифрования и дешифрования.

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