我想在 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 字符(也可能在控制台窗口中)?
好吧,这很简单:我必须使用 UTF32 而不是 Unicode:
$CharBytes = 169, 244, 1, 0
[System.Text.Encoding]::UTF32.GetString($CharBytes)
另一种在一行中执行此操作的方法是:
[char]::ConvertFromUtf32(0x1F4A9)
更好的是:
"`u{1F4A9}"
编辑:
上面,
"`u{}"
是一种转义由 PowersShell 解释的 unicode 字符的方法。它内置于 PowerShell 本身中,尽管仅内置于按需安装的 PowerShell (Core) 7 版本中,也未内置于旧版 Windows 附带的 Windows PowerShell 版本(其最新版本和 最后一个)版本是5.1)。
帮助主题的相关部分。
这是演示高代理和低代理的另一种方法,因为代码点超过 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