Как кодировать и декодировать emoji в android?
Я использовал https://github.com/rockerhieu/emojicon в моем приложении. Когда я передаю старую строку юникода в моем коде, emoji видна, но если я отправлю emoji на php-сервер, используя регулярный get webservice и извлекую строку, тогда он просто покажет строку unicode в моем приложении. как статические, так и загруженные сервером строки одинаковы, если я сравниваю.
Кто-нибудь может сказать мне, что я сделал в своем приложении. одно и то же приложение разработано в IOS, и они сделали это, сначала кодируя строку в ASCII > UTF-8 при отправке на сервер.
то они декодируют строку так же, как и они. Может кто-нибудь предложить мне, если бы это было бы совместимо с android также. Если да, то как я могу это сделать.
Ответы
Ответ 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;
}
}