Вопрос по unicode, unicode-literals, powershell, string-literals – Как кодировать коды символов Unicode в строковом литерале PowerShell?

40

Как я могу кодировать символ Unicode U + 0048 (H), скажем, в строке PowerShell?

В C # я бы просто сделал это:"\u0048", но это не похоже на работу в PowerShell.

Это мы, аськи. Но U + 0048 должен быть кодируемым в этом. Я на самом деле пытаюсь закодировать escape-символ (U + 001B). dan-gph
Какая у вас выходная кодировка? ($ OutputEncoding) Joe Chung

Ваш Ответ

3   ответа
52

\ u' на '0x' и приведите его к System.Char:

PS > [char]0x0048
H

Вы также можете использовать синтаксис «$ ()» для встраивания символа Unicode в строку:

PS > "Acme$([char]0x2122) Company"
AcmeT Company

Где T - представление PowerShell символа для незарегистрированных товарных знаков.

Вы даже можете написать небольшую функцию: function C ($ n) {[char] [int] "0x $ n"}. Что вы можете использовать в строке следующим образом: «$ (C 48) ello World». Не идеально, но, вероятно, немного ближе к побег Joey
Это также работает, когда вы хотите передать функцию unicode [char]. Спасибо за помощь Sonamor
11

PowerShell Core 6.0 добавляет поддержку с помощью следующей управляющей последовательности:

PS> "`u{0048}"
H

видетьhttps:? //docs.microsoft.com/en-us/powershell/module/microsoft.powershell.core/about/about_special_characters смотреть = 6-PowerShell # юникод-символ-UX

5

это не способ PowerShell, но это то, что я делаю. Я считаю, что это чище.

[regex]::Unescape("\u0048") # Prints H
[regex]::Unescape("\u0048ello") # Prints Hello

Похожие вопросы