我在Haskell中打印中文,并在Powershell中运行程序,结果碰到了编码问题。我根据网上的资料,使用chcp 65001切换编码为UTF-8,但是结果依旧是乱码。于是我上Stackoverflow提了个问题,很快就得到了热心程序员的回复。原来chcp在Powershell内部是没作用的。这主要是由于.NET的缓存。所以我们可以这样操作,在Powershell中输入如下的命令:
[Console]::InputEncoding = [Console]::OutputEncoding = $OutputEncoding =
[System.Text.Utf8Encoding]::new() # BOM-less UTF-8
这样就可以解决问题了,把Powershell内部的编码也切换为了UTF-8。如果要根据编码名称获得编码对象,可以使用 [System.Text.Encoding]::GetEncoding()
函数。