如何在Android字符串资源中添加utf-16字符?

我想在我的应用程序的字符串中使用Emojis。 当然,所有字符串都驻留在strings.xml

问题是并非所有的Emojis都是16位友好的。 一些Emojis可以表示为“普通”16位hex: ‘\ u26FF’,但有些是32位hex(UTF-16),通常表示为: ‘\ x1F600’ 。 在代码中处理应用程序内部的内容时我没有问题。 但strings.xml资源文件是UTF8编码的,并且不能正确处理非16位转义字符。

我尝试使用‘\ x1F600’ – 因为我看到‘\ u26FF’工作正常。 但它似乎不会吞噬’x’逃脱字符。 它也不像正则expression式‘\ x {1F600}’

所以我最终使用字符串占位符‘%1 $ s’并在代码中填写表情符号,如下所示:

// 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中?

但strings.xml资源文件是UTF8

如果是UTF-8编码,您可以直接放置表情符号。 但是你冒着编辑器或其他软件破坏它们的风险。

如果您将它们放在XML中,您可以尝试使用XML实体: 😀 ,我不确定Android如何支持他们。

您还可以使用代理项对:将表情符号转换为UTF-16并使用标准\u转义符。 例如,您可以查看此页面,它甚至会告诉您如何在Java中创建字符串litaral: http : //www.fileformat.info/info/unicode/char/1F600/index.htm

😜→U + 1F600→ "\uD83D\uDE00"

我假设你正在开发像表情符号键盘。 #EmojiCodeSheet可以帮助你

#EmojiCodeSheet

项目链接: https //github.com/shanraisshan/EmojiCodeSheet


任何表情符号都可以用两种不同的forms表示

  1. 代码点

例如: SMILING_FACE_WITH_SUN_GLASS表情符号

  1. 代码点: 0x1f60e
  2. 字符串: 😎 ( \ uD83D \ uDE0E infact)

您可以通过将它们保存在xml或java中来轻松地在Android中显示表情符号,列表如下所示

  1. XML作为strings.xml
  2. 作为JAVA文件中的静态常量

你只需要在Android应用程序中用表情符号图像替换这些表情符号代码,只需几行代码即可。

它只是复制和粘贴表情符号的最简单方法,它适用于Android Studio 3.0及更新版本

添加如下资源:

 This is a emoji example  

在Android Studio 3.0中,您可以复制并粘贴表情符号:

表情符号

在这里看起来如何:

表情符号