Почему использование юникода в формате \ u1F512 не работает в строках. xml? - PullRequest
0 голосов
/ 06 февраля 2020

У меня есть строка Unicode, которая отображает пробел, за которым следует символ блокировки. Это работает, если я объявлю это следующим образом.

<string name="lock">\u0020?</string>

enter image description here


Однако, если я объявлю это, используя следующий способ. Это показывает странный символ

<string name="lock">\u0020\u1F512</string>

enter image description here


Основанный на https://www.compart.com/en/unicode/U+1F512, я думал, что Unicode для символа замка \u1F512


Могу я узнать, почему это так? Как я могу использовать формат \u1F512 в strings.xml?

Ответы [ 2 ]

1 голос
/ 07 февраля 2020
Синтаксис

\u используется для кодирования кодовых точек Unicode в форме UTF-16. Поскольку кодовые блоки UTF-16 являются 16-битными значениями, для кодирования каждого кодового блока используются только 4 шестнадцатеричных цифры после \u.

Форма кодовой точки UTF-16 U + 1F512 (?) равна 0xD83D 0xDD12, поэтому для кодирования кодовой точки U + 1F512 в форме \u необходимо использовать \uD83D\uDD12 вместо \u1F512:

<string name="lock">\u0020\uD83D\uDD12</string>

\u1F512 интерпретируется как \u1F51, за которым следует неоткрытый 2. \u1F51 - это кодированная форма UTF-16 для кодовой точки U + 1F51 (). Вот почему вы видите ὑ2 вместо ? в вашем выводе.

0 голосов
/ 06 февраля 2020

Это потому, что ваше значение в юникоде не является символом блокировки. Вы на самом деле указываете на \u1F512 ὑ2 символ Юникода и его кодированный, и в шестнадцатеричном формате ...

попробуйте это \u0020\uD83D\uDD12

enter image description here

Тада. Простой способ расшифровки - использовать этот сайт. 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, вы получаете нечто совершенно отличное от того, что вы на самом деле пытаетесь сделать.

...