Comment puis-je mettre des caractères utf-16 dans la ressource de chaîne Android?

Je veux utiliser les Émoticônes dans mon application cordes. Toutes les chaînes résident, bien sûr, dans strings.xml

Le problème est que pas toutes les Émoticônes sont en 16 bits sympathique. Certaines Émoticônes peut être représenté comme "normal" 16 bits hex: '\u26FF' mais certains sont en 32 bits hexs (UTF-16), est généralement représenté comme: '\x1F600'. Je n'ai pas de problème de traiter avec ceux de l'intérieur, l'application, dans le code. Mais l'strings.xml fichier de ressources est encodés en utf-8, et ne traite pas correctement avec les 16 bits échapper les caractères.

J'ai essayé d'utiliser '\x1F600' - parce que j'ai vu que '\u26FF' fonctionne très bien. Mais il semble ne pas dévorer le 'x' escape char. Ni comme l'expression de la notation '\x{1F600}'

Donc j'ai fini par utiliser une chaîne de caractères de l'espace réservé '%1$s' et de remplissage dans les Emoji dans le code comme ceci:

//greeting_3 is defined as: "hello there %1$s!"
String s = context.getString(R.string.greeting_3, "😜");
//OR:
String s = context.getString(R.string.greeting_3, new String(Character.toChars(0x1F61C)));

Ce n'est pas très élégante, une solution... est-il un bon moyen de mettre les 32 bits de l'UTF-8 caractères strings.xml ?

source d'informationauteur Shoham