以下內容均在標準控制檯以及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