我將Unicode字符輸出到Windows上的控制檯,並且當我手動將字體更改爲Lucidia Grande時,輸出如預期的那樣。但我的問題是,Python,Ruby等如何使用默認字體將unicode字符輸出到Windows控制檯?我以爲默認的字體不支持所有的Unicode字符?Windows上的Unicode更改控制檯字體
1
A
回答
1
Python,Ruby等如何使用默認字體將unicode字符輸出到Windows控制檯?
他們不能也不顯示所有的Unicode字符。默認的控制檯字體aka「Raster Fonts」映射到.fon
文件,該文件的字形在您的語言環境的DOS代碼頁中帶有字形。西歐安裝即code page 850。在此代碼頁中,您確實會看到一些重音字母和其他非ASCII字符,但其他任何來自較寬Unicode的字符都將顯示爲?
。
實際上,即使您更改爲矢量字體,當您運行使用標準庫I/O函數(Python和Ruby)的MS C運行時實現的程序時,仍然僅限於單個代碼頁。您可以選擇更多的選擇,因爲您可以使用chcp
更改爲更多範圍的代碼頁,而不是「光柵字體」支持的代碼頁,但仍然無法以這種方式獲得全部Unicode。
(原則上,你應該能夠chcp 65001
得到UTF-8,但也有在Windows落實這一點,通常使其無法使用嚴重的bug,或者chcp 65000
爲UTF-16,但由於這不是一個ASCII超它傾向於打破stdio應用程序,包括Python/Java等)
相關問題
- 1. 在Windows中,SetCurrentConsoleFontEx會更改控制檯的字體大小嗎?
- 2. 如何更改控制檯字體?
- 3. 控制檯的Windows窗體
- 4. Windows控制檯和Qt Unicode文本
- 5. Windows控制檯似乎不喜歡Unicode
- 6. 如何將java控制檯字體更改爲斜體
- 7. Windows上的Haskell中的Unicode控制檯I/O
- 8. 如何在Eclipse中更改Android控制檯的字體?
- 9. 將控制檯應用程序中的字體更改爲光柵字體
- 10. Linux與Windows:控制檯如何呈現unicode字符?
- 11. C++在控制檯上更改輸出
- 12. Unicode字符在控制檯通過C++
- 13. 在C++控制檯應用程序中使用Unicode字體
- 14. 如何更改控制檯字體大小
- 15. 在控制檯中動態更改字體
- 16. 如何在Eclipse中更改控制檯字體大小-pydev
- 17. C在控制檯窗口中更改字體#
- 18. C#中的控制檯和Windows窗體#
- 19. C#控制檯字體
- 20. Unicode和控制檯解釋
- 21. 更改控制檯大小
- 22. 是否可以使用MinGW在Windows XP控制檯上獲取unicode字符?
- 23. Windows控制檯
- 24. 無法更改unicode字符上的字體顏色
- 25. 更改UISegmented控制器字體
- 26. C#Windows窗體.Net和DOS控制檯
- 27. Process.WaitForExit()在控制檯VS Windows窗體
- 28. Windows 8.1E上的SCCM 2012 R2控制檯
- 29. 在Windows上沒有控制檯的Cython
- 30. 在Windows上的控制檯GUI Haskell
嗨,我使用GetConsoleCp()函數,並發現代碼頁爲850,正如你前面說過的有一些口音。那麼爲什麼當我試圖說出「á」這個字母時,我會得到這個奇怪的字母嗎?這是一個截圖的鏈接,所以你可以看到。 [鏈接](https://dl-web.dropbox.com/get/screenshot.png?_subject_uid=295255838&w=AAB7mNwAHgEPW5RU8TB4yF4M8dfc1-p0eQBq1UU9AjEpug)在它們之間隔兩個850的應該是字母「A」,而是你會看到它的不。有沒有辦法解決?謝謝! – Francis
截圖鏈接已損壞,但我的猜測是您的源代碼可能是使用錯誤編碼編譯的。爲了避免源代碼編碼問題,你可以把它寫成如'std :: cout <<'\ xA0'(因爲''是cp850中的字節160')。 – bobince
感謝您的回答。它現在輸出正確。只是一個問題。我如何使用SetConsoleOutputCP()函數?因爲每次使用它時,代碼頁實際上都不會更改爲我設置的代碼頁。謝謝! – Francis