【发布时间】:2026-02-17 15:20:05
【问题描述】:
我想在我的应用字符串中使用表情符号。当然,所有字符串都驻留在 strings.xml 中
问题在于并非所有表情符号都是 16 位友好的。一些 Emoji 可以表示为“普通”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)));
这不是一个非常优雅的解决方案...有没有合适的方法将 32 位 UTF-8 字符放入 strings.xml 中?
【问题讨论】:
标签: android xml string utf-8 emoji