Как я могу поместить символы 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