在PowerShell中显示Unicode表情符号

时间:2017-08-10 21:55:17

标签: powershell unicode

我想在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字符(也可能在控制台窗口中)?

3 个答案:

答案 0 :(得分:1)

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

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

答案 1 :(得分:1)

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

[char]::ConvertFromUtf32(0x1F4A9)

甚至更好:

"`u{1F4A9}"

答案 2 :(得分:0)

这是演示高和低代理的另一种方式,因为代码点具有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