如何在 PowerShell 字符串中对 Unicode 字符 U+0048 (H) 进行编码?
在 C# 中,我会这样做:"\u0048"
,但这似乎在 PowerShell 中不起作用。
如何在 PowerShell 字符串中对 Unicode 字符 U+0048 (H) 进行编码?
在 C# 中,我会这样做:"\u0048"
,但这似乎在 PowerShell 中不起作用。
将 '\u' 替换为 '0x' 并将其转换为 System.Char:
PS > [char]0x0048
H
您还可以使用“$()”语法将 Unicode 字符嵌入到字符串中:
PS > "Acme$([char]0x2122) Company"
AcmeT Company
其中 T 是 PowerShell 对非注册商标字符的表示。
根据文档,PowerShell Core 6.0 增加了对这个转义序列的支持:
PS> "`u{0048}"
H
也许这不是 PowerShell 方式,但这就是我所做的。我觉得它更干净。
[regex]::Unescape("\u0048") # Prints H
[regex]::Unescape("\u0048ello") # Prints Hello
使用 PowerShell 的另一种方法。
$Heart = $([char]0x2665)
$Diamond = $([char]0x2666)
$Club = $([char]0x2663)
$Spade = $([char]0x2660)
Write-Host $Heart -BackgroundColor Yellow -ForegroundColor Magenta
使用该命令help Write-Host -Full
阅读所有相关信息。
对于我们这些仍在使用 5.1 并且想要使用高阶 Unicode 字符集(这些答案都不起作用)的人,我制作了这个函数,因此您可以像这样简单地构建字符串:
'this is my favourite park ',0x1F3DE,'. It is pretty sweet ',0x1F60A | Unicode
#takes in a stream of strings and integers,
#where integers are unicode codepoints,
#and concatenates these into valid UTF16
Function Unicode {
Begin {
$output=[System.Text.StringBuilder]::new()
}
Process {
$output.Append($(
if ($_ -is [int]) { [char]::ConvertFromUtf32($_) }
else { [string]$_ }
)) | Out-Null
}
End { $output.ToString() }
}
请注意,让这些显示在您的控制台中完全是另一个问题,但如果您要输出到Outlook 电子邮件或 Gridview(如下),它将正常工作(因为 utf16 是 .NET 接口的本机)。
这也意味着如果您更习惯使用十进制,您也可以很容易地输出纯控制(不一定是 unicode)字符,因为您实际上不需要使用0x
(hex) 语法来生成整数。'hello',32,'there' | Unicode
会在两个单词之间放置一个不间断的空格,就像你这样做一样0x20
。
要使其适用于 BMP 之外的字符,您需要使用Char.ConvertFromUtf32()
'this is my favourite park ' + [char]::ConvertFromUtf32(0x1F3DE) +
'. It is pretty sweet ' + [char]::ConvertFromUtf32(0x1F60A)
请注意,某些字符可能需要打印“双符文”:
PS> "C:\foo\bar\$([char]0xd83c)$([char]0xdf0e)something.txt"
将打印:
C:\foo\bar\something.txt
您可以在此处的“unicode escape”行中找到这些“符文”:
https://dencode.com/string