如何将 utf-16 字符放入 Android 字符串资源中?

Posted

技术标签:

【中文标题】如何将 utf-16 字符放入 Android 字符串资源中?【英文标题】:How can I put utf-16 characters in Android string resource? 【发布时间】:2014-09-11 05:35:18 【问题描述】:

我想在我的应用字符串中使用表情符号。当然,所有字符串都驻留在 strings.xml 中

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

我尝试使用 '\x1F600' - 因为我看到 '\u26FF' 工作得很好。但它似乎不会吞噬“x”转义字符。也不像正则表达式 '\x1F600'

所以我最终使用了一个字符串占位符 '%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 中?

【问题讨论】:

【参考方案1】:

但是strings.xml资源文件是UTF8的

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

如果您将它们放在 XML 中,您可以尝试使用 XML 实体:😀,不过我不确定 android 对它们的支持程度。

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

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

【讨论】:

我尝试了直接方式,但它导致我的应用程序出现段错误。这就是我开始寻找替代品的原因 :-) 我会尝试其他选择。 我已经尝试过原始文本和

以上是关于如何将 utf-16 字符放入 Android 字符串资源中?的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 C# 将 powershell 脚本编码为 base64 UTF16-LE 字符串

将 unicode 代码点转换为 utf-16

delphi中如何把有规律的文本文字放入STRINGGRID中的每个单元格中

没有排序规则的 Unicode (UTF-16) 数据如何存储在 varchar 列中?

如何判断一个字符串是不是是unicode编码?

使用C ++将越南语字符编码为USASCII,ISO88591,UTF8,UTF16BE,UTF16LE,UTF16