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