以下内容均在标准控制台以及Powershell ISE下使用包含经过测试的unicode代码点的字体在PowerShell 3.0中运行。C#和Java控制台编码和PowerShell
下面的C#程序正确打印~
(所以我们知道它可以工作):
static void Main(string[] args)
{
Console.WriteLine("\u2248");
}
在一个旁注,当我看着Console.OutputEncoding
它声称是代码页IBM850这当然不可能是真的。即使更奇怪的是独立于我设置的控制台的代码页(使用chcp
)的输出是好的,所以.NET不得不担心编码本身(或调用一些特殊的API?)
现在,当我尝试下面的Java程序我结束了混乱的输出( "H
):
public static void main(String[] args) throws UnsupportedEncodingException {
System.out.println("\u2248");
}
现在,是因为Java着眼于系统编码并使用,这将是Windows的1252,所以这是符合市场预期,但以下也不起作用:
public static void main(String[] args) throws UnsupportedEncodingException {
new PrintStream(System.out, true, "UTF-16").println("\u2248");
}
我的可以做的是事先使用UTF-8并调用chcp 65001
。此工作,然后显示正确的标志符号,但有一个错误,其中一些字符在行的末尾重复:打印\u2248weird.
结果在≈weird.d.
所以这也不是很好。
那么C#使用什么编码来写入控制台,或者更一般地说,我如何让Java在PowerShell中正确输出Unicode呢?
您是否在设置运行'java -Dfile.encoding = UTF-8'的'chcp 65001'并使用'System.out。println()'而不是通过'PrintStream'创建一个'PrintStream'? – RealSkeptic
@RealSkeptic这是我如何使现有的jar文件正常工作而不必更改代码(所以我希望它只是我需要的编码而不是一些奇怪的Win32 API调用)的实际计划。它的行为与使用PrintStream的方式完全相同。 – Voo
对这[[答案](http://stackoverflow.com/a/388500/4125191)的评论可能会帮助你理解错误发生的原因。抱歉,我没有解决方案,但。可能尝试使用utf-16的1200或1201。 – RealSkeptic