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

Sho*_*ham 15 xml string android utf-8 emoji

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

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

我尝试使用'\ x1F600' - 因为我看到'\ u26FF'工作正常.但它似乎不会吞噬'x'逃脱字符.它也不像正则表达式'\ 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)));
Run Code Online (Sandbox Code Playgroud)

这不是一个非常优雅的解决方案...有没有一种正确的方法将32位UTF-8字符放在strings.xml中?

Kar*_*l S 10

但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"

  • 我尝试了直接的方法,但它导致我的应用程序出现段错误.这就是为什么我开始寻找替代方案:-)我会尝试其他选项. (5认同)
  • 我试过原始文本和😀 在运行时使用segfault,�� 带有构建错误("XML文件中的错误:中止构建.").我认为您可以安全地提交错误,它是有效的. (2认同)