在 PowerShell 中显示 Unicode 表情符号

问题描述 投票:0回答:3

我想在 PowerShell 中显示像 U+1F4A9 这样的 Unicode 表情符号。我知道这仅在 ISE 控制台内有效,但我不知道如何操作。

到目前为止我尝试过的:

$CharBytes = [System.Text.Encoding]::Unicode.GetBytes("💩")

这将返回 61, 216, 169, 220。但这不能是 0x1F4A9 的表示吗?

当我尝试时

[BitConverter]::GetBytes(0x1F4A9)

我将得到一组不同的字节:169, 244, 1, 0。将它们转换为 Unicode 字符结果为

所以我的问题是:如何在 PowerShell ISE 中显示任何 Unicode 字符(也可能在控制台窗口中)?

powershell unicode
3个回答
7
投票

好吧,这很简单:我必须使用 UTF32 而不是 Unicode:

$CharBytes = 169, 244, 1, 0
[System.Text.Encoding]::UTF32.GetString($CharBytes)

5
投票

另一种在一行中执行此操作的方法是:

[char]::ConvertFromUtf32(0x1F4A9)

更好的是:

"`u{1F4A9}"

编辑:

上面,

"`u{}"
是一种转义由 PowersShell 解释的 unicode 字符的方法。它内置于 PowerShell 本身中,尽管仅内置于按需安装的 PowerShell (Core) 7 版本中,也未内置于旧版 Windows 附带的 Windows PowerShell 版本(其最新版本和 最后一个)版本是5.1)。

请参阅about_Special_Characters

帮助主题
相关部分。


4
投票

这是演示高代理和低代理的另一种方法,因为代码点超过 16 位。 结果实际上是一个 2 个字符的字符串。 如果你尝试单独显示每个字符,它看起来就像垃圾。

$S = 0x1f600
$S = $S - 0x10000
$H = 0xD800 + ($S -shr 10)
$L = 0xDC00 + ($S -band 0x3FF)
$emoji = [char]$H + [char]$L
$emoji

😀

参考:http://www.russellcottrell.com/greek/utilities/SurrogatePairCalculator.htm

或者取回代码:

($emoji[0] - 0xD800) * 0x400 + $emoji[1] - 0xDC00 + 0x10000 | % tostring x

1f600
© www.soinside.com 2019 - 2024. All rights reserved.