【问题标题】: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 的格式?

【问题讨论】:

    标签: android unicode


    【解决方案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 编码时,您会得到与实际尝试完全不同的结果。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2020-04-02
        • 1970-01-01
        • 2011-10-03
        • 1970-01-01
        • 1970-01-01
        • 2010-11-19
        • 2015-01-20
        相关资源
        最近更新 更多