在Windows上更改控制台字体的Unicode

1 投票
1 回答
605 浏览
提问于 2025-04-18 06:55

我在Windows的控制台上输出Unicode字符,手动把字体改成Lucidia Grande后,输出效果很好。但我想问的是,像Python、Ruby这些语言,怎么才能在Windows控制台上用默认字体输出Unicode字符呢?我记得默认字体好像不支持所有的Unicode字符吧?

1 个回答

1

Python、Ruby等语言如何在Windows控制台中使用默认字体输出Unicode字符呢?

其实它们不能,也不能显示所有的Unicode字符。默认的控制台字体,也就是“光栅字体”,是通过一个.fon文件来映射字符,这个文件只包含你所在地区的DOS代码页中的字符。对于西欧地区的安装来说,这个代码页是代码页850。在这个代码页中,你可以看到一些带重音的字母和其他非ASCII字符,但如果是更广泛的Unicode字符,它们会显示成?

实际上,即使你换成了矢量字体,当你运行使用微软C运行时库的标准输入输出函数的程序(Python和Ruby都是这样)时,你仍然只能使用一个代码页。虽然你可以用chcp命令切换到比“光栅字体”支持的更多的代码页,但这样仍然无法显示所有的Unicode字符。

理论上,你应该可以用chcp 65001来获取UTF-8编码,但Windows对这个的实现存在严重的bug,通常会导致无法使用。或者可以用chcp 65000来获取UTF-16编码,但因为它不是ASCII的超集,所以往往会导致包括Python和Java在内的标准输入输出程序出现问题。

撰写回答