2016-08-18 156 views
2

這太瑣碎了,聽起來很愚蠢,但請耐心等待。繪製笑臉ASCII藝術

我曾經是能夠得出ASCII藝術笑臉做的東西,如臉similar to this post

Console.Write((char)1); 

回到我沒有在Windows XP/7這個時候,控制檯無法在默認情況下呈現字符。我解決這個問題,編碼了通過使用這種特殊編碼:

Console.OutputEncoding = System.Text.Encoding.GetEncoding(1252); 

如今,我在Windows 10嘗試了這一點,我得到這個奇怪的問號這讓人想起原來的編碼問題:

enter image description here

有什麼改變在Windows 10控制檯導致這個問題?我該如何解決它?

+0

打開控制檯,按住Alt,鍵入NumPad-1,釋放Alt。在Windows 7中,我獲得了笑臉。你在Windows 10中獲得了什麼? – grek40

+0

我也得到笑臉。這排除了操作系統差異。 – Gigi

+0

操作系統的不同之處在於,Windows 10上的控制檯和Raster Fonts(強制OEM字符集)在傳統Windows版本上都有TrueType字體。它以前的工作只是一個幸運的環境組合,而不是你做出正確的事情讓笑臉出現的事實。 – Joey

回答

1

這爲我工作在Windows 10:

public static void Main() 
{ 
    Console.OutputEncoding = System.Text.Encoding.Unicode; 
    Console.WriteLine("☺"); 
} 
2

注意(char)1只與OEM代碼頁437工作這在DOS應用程序運作良好,但在Windows上的方法是稍微棘手,尤其是因爲U + 0001確實是而不是代表一個笑臉。 U + 263A呢。所以,正確的做法居然是:

Console.WriteLine((char)0x263A); 

而且你可能必須明確設置你的輸出編碼爲Unicode或UTF-8,使其顯示出來,否則字符經過沿途的幾個字符集轉換,這取決於你的控制檯窗口設置:使用

Console.OutputEncoding = Encoding.Unicode; 
+0

你爲什麼要將0x263A轉換爲char?爲什麼不使用'「☺」'? –

+0

@MthetheWWatson:因爲它可以被任何人輸入。因爲無論文件編碼如何,它都會存活下來。由於作者也使用這種格式,所以幾乎不需要將差異代碼放大到超出必要的程度。但是''\ u263A''會更好,但是我在PowerShell中完成了足夠的這些字符代碼,我一開始並沒有這麼想。 – Joey