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

时间:2014-07-20 16:58:59

标签: android xml string utf-8 emoji

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

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

我尝试使用'\ x1F600' - 因为我看到'\ u26F'工作得很好。但它似乎不会吞噬'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)));

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

3 个答案:

答案 0 :(得分: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"

答案 1 :(得分:1)

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

答案 2 :(得分:-4)

添加如下资源:

std::unique_ptr<>

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

Emoji

以下是它的外观:

Emoji