C#控制台输出正无穷显示为?而非∞的问题求助
解决控制台显示∞而非?的问题
我来帮你搞定这个控制台输出正无穷符号的问题!你遇到的情况是代码里double.PositiveInfinity在控制台显示成?,但写入文件正常,而且已经试了不变文化、UTF8/Unicode编码都没效果,对吧?
问题根源
控制台显示特殊字符需要两个关键条件同时满足:一是当前控制台用的字体支持∞这个Unicode字符,二是控制台的编码配置和输出编码匹配。文件能正常显示是因为文本编辑器会正确解析UTF8编码,而且编辑器字体一般都支持这些字符,但控制台的默认配置可能没跟上。
具体解决步骤
1. 先检查控制台字体
默认的Consolas字体其实是支持∞的,但如果你用的是旧字体(比如某些系统自带的点阵字体)就不行。修改方法很简单:
- 右键控制台窗口的标题栏,选「属性」
- 切换到「字体」标签页,选
Consolas、Segoe UI或者Lucida Console这类支持Unicode的字体,确定保存就行。
2. 正确配置编码(代码层面)
只设置Console.OutputEncoding可能不够,得同时配置输入输出编码,而且显式指定文化输出更稳妥。试试这段代码:
using System; using System.Globalization; using System.Text; class Program { static void Main() { // 同时设置控制台的输入和输出编码为UTF8 Console.InputEncoding = Encoding.UTF8; Console.OutputEncoding = Encoding.UTF8; var positiveInf = double.PositiveInfinity; // 显式用不变文化转换字符串再输出 Console.WriteLine(positiveInf.ToString(CultureInfo.InvariantCulture)); } }
3. 进阶:切换控制台代码页
如果上面两步还没解决,可能是控制台的代码页不是UTF8。可以手动切换到UTF8代码页(编号65001),代码里可以这么做:
using System; using System.Globalization; using System.Text; using System.Runtime.InteropServices; class Program { // 调用Windows API设置控制台代码页 [DllImport("kernel32.dll")] static extern bool SetConsoleOutputCP(uint wCodePageID); static void Main() { // 先设置代码页为UTF8 SetConsoleOutputCP(65001); // 再同步编码设置 Console.InputEncoding = Encoding.UTF8; Console.OutputEncoding = Encoding.UTF8; var positiveInf = double.PositiveInfinity; Console.WriteLine(positiveInf.ToString(CultureInfo.InvariantCulture)); } }
为什么文件能正常显示?
因为文件是按UTF8格式存储的,打开它的文本编辑器会自动识别编码,而且编辑器的字体基本都支持∞这类Unicode字符。但控制台是独立的环境,字体和编码配置都得单独调整才行。
内容的提问来源于stack exchange,提问作者user20510170
相关产品推荐
相关产品推荐

