Как кодировать 32-разрядные символы Unicode в строковом литерале PowerShell? - PullRequest
4 голосов
/ 29 января 2011

Этот вопрос о переполнении стека касается 16-битных символов Юникода.Я хотел бы подобное решение, которое поддерживает 32-разрядные символы.См. эту ссылку для получения списка различных диаграмм Юникода .Например, 32-разрядными символами являются Музыкальные символы .

. Ответ на вопрос, связанный выше, не работает, поскольку он преобразует значение System.Int32 какSystem.Char, который является 16-битным типом.

Редактировать: Позвольте мне уточнить, что меня не особо волнует отображение 32-битного символа Юникод, я просто хочу сохранить символ в строковой переменной.

Редактировать # 2: Я написал фрагмент PowerShell, который использует информацию в отмеченном ответе и его комментариях.Я бы хотел добавить это в другой комментарий, но комментарии не могут быть многострочными.

$inputValue = '1D11E'
$hexValue = [int]"0x$inputValue" - 0x10000
$highSurrogate = [int]($hexValue / 0x400) + 0xD800
$lowSurrogate = $hexValue % 0x400 + 0xDC00
$stringValue = [char]$highSurrogate + [char]$lowSurrogate

Dour High Arch все еще заслуживает похвалы за ответ, который помог мне наконец понять суррогатные пары.

Ответы [ 2 ]

4 голосов
/ 13 июня 2014

ИМХО, самый элегантный способ использования литералов Unicode в PowerShell - это

[char]::ConvertFromUtf32(0x1D11E)

Подробнее см. Мой blogpos t

2 голосов
/ 29 января 2011

Предполагая, что PowerShell использует UTF-16, 32-битные кодовые точки представлены как суррогаты .Например, U + 10000 представляется как:

0xD100 0xDC00

То есть два 16-разрядных символа;hex D100 и DC00.

Удачи в поиске шрифта с суррогатными символами.

...