Chcę używać emotikonów w ciągach mojej aplikacji. Wszystkie ciągi zawierają oczywiście ciągi znaków.xmlJak umieścić znaki UTF-16 w zasobie tekstowym systemu Android?
Problem polega na tym, że nie wszystkie emoji są 16-bitowe. Niektóre emotikony mogą być reprezentowane jako "normalne" 16-bitowe szesnastkowo: '\ u26FF', ale niektóre z nich to 32-bitowe heksy (UTF-16), zwykle reprezentowane jako: '\ x1F600'. Nie mam problemu z tymi w aplikacji, w kodzie. Ale plik zasobów strings.xml ma kodowanie UTF8 i nie radzi sobie poprawnie z 16-bitowymi znakami escape.
Próbowałem za pomocą '\ x1F600' - bo widziałem że '\ u26FF' działa dobrze. Wygląda jednak na to, że nie pożera znaku "x". Ani nie jak notacji regexp '\ x {1F600}'
więc skończyło się stosując zastępczy ciąg '% 1 $ S' i wypełnienie Emoji w kodzie tak:
// 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)));
To nie jest bardzo eleganckie rozwiązanie ... czy istnieje odpowiedni sposób na umieszczenie 32-bitowych znaków UTF-8 w pliku strings.xml?
Próbowałem w sposób bezpośredni, ale to przyczyna es mojej aplikacji do segfault. Dlatego zacząłem szukać alternatyw :-) Wypróbuję inne opcje. – Shoham
Próbowałem tekstu nieprzetworzonego i & # x1f600; z segfault w środowisku wykonawczym i & # xd83d; & # xde00; z błędem kompilacji ("Błąd w pliku XML: przerwanie kompilacji "). Myślę, że możesz bezpiecznie zgłosić błąd, jest on ważny. –
Wiem błąd: https://code.google.com/p/android/issues/detail?id=64892 –