Числовая эквивалентность между символами HTML и Delphi?

Сущность символа HTML 𝕒:

введите описание изображения здесь

может быть создан из числа 120146 с помощью этого HTML-кода:

<!DOCTYPE html>
<html>
<style>
body {
    font-size: 20px;
}
</style>
<body>

<p>I will display &#120146;</p>

</body>
</html>

Некоторые из этих расширенных символьных символов могут быть созданы из одинакового числового значения как в HTML, так и в Delphi 10.1.2. Например:

И &#174;, и Chr(174) создают символ символа "зарегистрированный товарный знак" ®

И &#163;, и Chr(163) создают символ символа фунта £

И т.п.

К сожалению, это не относится к приведенному выше числу 120146, где Chr(120146) в Delphi создает «забавный китайский символ».

Итак, как я могу создать указанный выше символ &aopf; из числа 120146 в Delphi? И в каком числовом диапазоне указанная выше числовая эквивалентность между HTML и Delphi работает или не работает?


person user1580348    schedule 21.09.2017    source источник


Ответы (1)


Это «МАТЕМАТИЧЕСКИЙ ДВОЙНОЙ СТРУК МАЛЫЙ A» (U + 1D552) . Он находится за пределами базовой многоязычной плоскости, поэтому в UFT-16 кодируется с помощью суррогатной пары. Это означает, что требуются два символьных элемента UTF-16.

Посмотрите на свою попытку: Chr(120146). Теперь 120146 > high(Word) (= 65535), который сообщает вам, что ваш код не может быть успешным. Помните, что каждый символьный элемент UTF-16 имеет размер 16 бит. Было бы неплохо, если бы об этом предупредил компилятор. Является ли?

Ссылка выше расскажет вам, как его закодировать. Его дает эта суррогатная пара:

0xD835 0xDD52

В Delphi это проще всего было бы записать как:

#$D835#$DD52

Если вы начинаете с кода UTF-32 как числового значения, вы можете преобразовать его в строку Delphi, используя _ 5_ из System.Character блока:

TCharacter.ConvertFromUtf32($1D552)

Очевидно, что аргументом этой функции может быть переменная.

Если большая часть приведенной выше терминологии Unicode вам неизвестна, прочтите эти статьи:

person David Heffernan    schedule 21.09.2017