Как я могу поместить символы utf-16 в текстовый ресурс Android?
Я хочу использовать Emojis в своих строках приложения. Все строки находятся, конечно, в strings.xml
Проблема в том, что не все Emojis дружелюбны на 16 бит. Некоторые Emojis могут быть представлены как "нормальные" 16-разрядные hex: '\ u26FF', но некоторые из них - 32-разрядные гексы (UTF-16), обычно представляемые как: '\ x1F600'. У меня нет проблем с теми, кто находится внутри приложения, в коде. Но файл ресурсов strings.xml кодируется в кодировке UTF8 и не обрабатывает правильные символы не 16 бит.
Я попытался использовать '\ x1F600', потому что видел, что '\ u26FF' работает отлично. Но, похоже, он не поглощает "x" escape char. Также ему не нравилось обозначение регулярного выражения '\ x {1F600}'
Итак, я закончил использование строкового заполнителя '% 1 $s' и заполнил Emoji в коде следующим образом:
// 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)));
Это не очень элегантное решение... есть ли способ разместить 32-битные символы UTF-8 в strings.xml?
Ответы
Ответ 1
Но файл ресурсов strings.xml - это UTF8
Если это кодируется UTF-8, вы можете поставить свои смайлики напрямую. Но тогда вы рискуете, что ваш редактор или другое программное обеспечение уничтожит их.
Если вы помещаете их в XML, вы можете попробовать использовать объекты XML: 😀
, хотя я не уверен, насколько хорошо их поддерживает Android.
Вы также можете использовать суррогатные пары: конвертировать эмодзи в UTF-16 и использовать стандартный escape \u
. Вы можете, например, проверить эту страницу, она даже говорит вам, как создать строковый литарал в Java: http://www.fileformat.info/info/unicode/char/1F600/index.htm
😜 → U + 1F600 → "\uD83D\uDE00"
Ответ 2
Я предполагаю, что вы развиваете нечто вроде Emoji Keyboard. # EmojiCodeSheet может помочь вам в этом
![# EmojiCodeSheet]()
Ссылка на проект: https://github.com/shanraisshan/EmojiCodeSheet
Любые эможи могут быть представлены в 2-х различных формах
Пример: SMILING_FACE_WITH_SUN_GLASS Emoji
- Codepoint: 0x1f60e
- String: 😎 (который является \uD83D\uDE0E infact)
Вы можете легко отображать emojis в Android, либо сохраняя их в xml или java, список присутствует ниже
вам просто нужно заменить эти emoji-коды на emoji-изображения в вашем приложении для Android, выполнив несколько строк кода.
Ответ 3
Добавьте ресурс следующим образом:
<string name="string_title">This is a emoji example <U+1F642></string>
В Android Studio 3.0 вы можете скопировать и вставить emoji:
![Emoji]()
И вот как это выглядит:
![Emoji]()