samsung - emojis de iphone para android
¿Cómo codificar y decodificar emoji en android? (7)
Puede codificar y decodificar emoticonos sin usar ninguna biblioteca en Android si recibe unicode de su servidor.
Ejemplo:
U+1F601 is 16 bit unicode.
Reemplace U+
con 0x
.
int originalUnicode=0x1F601;
textView.setText(getEmoticon(originalUnicode));
public String getEmoticon(int originalUnicode) {
return new String(Character.toChars(originalUnicode));
}
Utilicé la biblioteca https://github.com/rockerhieu/emojicon en mi aplicación. Cuando paso una cadena unicode estática en mi código, el emoji está visible, pero si envío el emoji a un servidor php usando el servicio web normal de obtención y recupero la cadena, entonces solo muestro una cadena Unicode en mi aplicación. Tanto las cadenas estáticas como las recuperadas por el servidor son iguales si las comparo.
¿Alguien puede decirme qué mal he hecho en mi aplicación? la misma aplicación se desarrolló en IOS y lo que hicieron es que primero codificaron la cadena en ASCII> UTF-8 mientras se envían al servidor. entonces están decodificando la cadena de la misma manera que envían. ¿Alguien puede sugerirme SI esto también sería compatible con Android? Si es así, ¿cómo puedo hacer esto?
Convierta Unicode a Emoji en contenido completo sin usar ninguna biblioteca.
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; }
En mi caso, todo el texto en el mensaje desaparece después de los símbolos & y +, así que decidí reemplazarlos antes de enviarlos y luego de recibirlos, y me funciona bien.
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);
}
Estoy usando la misma biblioteca ... No necesita codificar ni escapar de los emoji ... simplemente getText (). ToString () funcionará.
Sigue los pasos
En mysql, cambie la intercalación de campos a utf8mb4_unicode_ci
(mi base de datos y la clasificación de tablas es utf8_unicode_ci)
Usé PHP Codigniter en el servidor para que la configuración de la base de datos
''char_set'' => ''utf8mb4'',
''dbcollat'' => ''utf8mb4_unicode_ci''
Luego, en Android use textView.getText().toString();
A continuación, envíe el texto sin utilizar ningún código o escape
He usado la misma biblioteca que tú para emoji. He usado URLEncoder.encode (commentString, "UTF-8") para la codificación y, de manera similar, URLDecoder.decode (encodedComment, "UTF-8") para la decodificación.
Funciona perfectamente para mi. Con suerte para ti también.
Emojis
necesita ser codificado y decodificado. Debes enviar el texto al servidor codificando y mostrar de nuevo en la app
decodificando la misma. El código está abajo para el cifrado y descifrado.
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;
}
}
Podemos usar la biblioteca commons-lang (commons-lang-2.5.jar) para codificar y decodificar los caracteres Unicode. Descargue el archivo jar here o use gradle: compile ''org.apache.commons:commons-lang3:3.4''
.
Para uso de codificación : StringEscapeUtils.escapeJava(String text)
Esto se puede usar en el texto de EditText
Android cuando se llama getText
método getText
, donde codificará los caracteres Unicode correctamente antes de enviarlos al servidor web.
Para el uso de decodificación - StringEscapeUtils.unescapeJava(String text)
Esto se puede usar en TextView
Android para establecer TextView
, donde decodificará los caracteres Unicode correctamente después de recibir la respuesta del servidor 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);
FYI Usa la codificación y decodificación para el lado del servicio web también. La cadena codificada en Unicode debe decodificarse del servicio web y la respuesta del servicio web debe codificarse antes de enviarse a los clientes. Las tablas del servidor deben contener utf8mb4 en lugar de utf8, porque el carácter Unicode necesita 4bytes por carácter. Por lo tanto, Unicode no se representará en 3bytes.