为啥源码中的strings.xml中有msgid属性
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了为啥源码中的strings.xml中有msgid属性相关的知识,希望对你有一定的参考价值。
参考技术A 就是写一个有两个activity的android程序。主activity中定义四个字符串变量,并赋予 下面四个值:你完整的名字;你程序的名字;你的学期;当前课程的名称。这四个值不能直接写在代码中,要定义在res\/values\/strings.xml文件内。然后代码中引用并赋值给刚才的变量。\r\n在主activity中添加一个按钮,当点击这个按钮时跳转到第二个activity中,并将刚才四个变量值传过去,然后显示在第二个activity上。\r\n有疑问,请追问。望采纳!\r\nps:纯手工!本回答被提问者和网友采纳为啥使用 \u1F512 格式的 unicode 在 strings.xml 中不起作用?
【中文标题】为啥使用 \\u1F512 格式的 unicode 在 strings.xml 中不起作用?【英文标题】:Why using unicode in the format \u1F512 doesn't work in strings.xml?为什么使用 \u1F512 格式的 unicode 在 strings.xml 中不起作用? 【发布时间】:2020-05-22 00:05:25 【问题描述】:我有一个 unicode 字符串,它显示空格后跟一个锁符号。如果我通过以下方式声明它就可以工作。
<string name="lock">\u0020????</string>
但是,如果我使用以下方式声明它。它显示奇怪的符号
<string name="lock">\u0020\u1F512</string>
基于https://www.compart.com/en/unicode/U+1F512,我认为锁符号的unicode是\u1F512
我可以知道为什么会这样吗?如何在strings.xml
中使用\u1F512
的格式?
【问题讨论】:
【参考方案1】:\u
语法用于以 UTF-16 形式对 Unicode 代码点进行编码。由于 UTF-16 代码单元是 16 位值,因此在 \u
之后仅使用 4 个十六进制数字对每个代码单元进行编码。
codepoint U+1F512(?
)的UTF-16形式为0xD83D 0xDD12
,所以要将codepoint U+1F512编码为\u
形式,需要使用\uD83D\uDD12
而不是\u1F512
:
<string name="lock">\u0020\uD83D\uDD12</string>
\u1F512
被解释为\u1F51
,后跟一个未转义的2
。 \u1F51
是编码点 U+1F51 (ὑ
) 的 UTF-16 编码形式。这就是为什么您会在输出中看到 ὑ2
而不是 ?
。
【讨论】:
【参考方案2】:那是因为你的 unicode 值不是锁符号。您实际上指向的是\u1F512
ὑ2 unicode 符号,以及它的编码和十六进制...
试试这个\u0020\uD83D\uDD12
多田。一个简单的解码方法是使用这个网站。 https://www.online-toolz.com/tools/text-unicode-entities-convertor.php
注意:它也是导入的,就像您发布链接的网站一样;要了解操作系统处理 unicode 的方式存在差异。例如,\u1F512
不与 \u0x0001F512
相同(在 UTF-8 上下文中)。
基本上 Android 和 IDE,默认设置为使用 UTF-8。
<?xml version="1.0" encoding="utf-8"?>
它在您的所有 xml 文件中。因此,当您尝试使用 UTF-16 或 UTF-32 unicode 编码时,您会得到与实际尝试完全不同的结果。
【讨论】:
以上是关于为啥源码中的strings.xml中有msgid属性的主要内容,如果未能解决你的问题,请参考以下文章
从 AppWidgetProvider 中的 strings.xml 获取字符串