为啥源码中的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 获取字符串

Android中strings.xml字符串中的粗体字

Android:将 Json 对象转换为 Strings.xml

使用strings.xml和翻译

如何在构建时设置strings.xml值?

strings.xml 中的参数是不是可能? [复制]