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

人气:69 发布:2023-01-03 标签: xml string utf-8 android emoji

问题描述

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

问题是,并不是所有的表情符号都是16位友好的。有些表情符号可以表示为"Normal"16位十六进制:‘u26FF’,但有些是32位十六进制(UTF-16),通常表示为:‘x1F600’。我可以用代码与应用程序内部的人打交道。但是字符串.xml资源文件是UTF8编码的,并且不能正确处理非16位转义字符。

我尝试使用‘x1F600’--因为我发现‘u26FF’运行良好。但它似乎没有吃掉‘x’转义字符。它也不喜欢regexp符号‘x{1F600}’

所以我最终使用了字符串占位符‘%1$s’,并在如下代码中填充了Emoji:

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

推荐答案

但字符串.xml资源文件为UTF8

如果它是UTF-8编码的,你可以直接放入你的表情符号。但随后您可能会冒着被您的编辑人员或其他软件破坏的风险。

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

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

→U+1F600→"uD83DuDE00"

18