复制代码:
using System;
using System.Text;
class Program {
static void Main(string[] args) {
var infinity = "\u221e";
Console.OutputEncoding = Encoding.GetEncoding(1252);
Console.WriteLine(infinity);
Console.ReadLine();
}
}
代码页1252在英格兰是很常见的事故,因为它是那里的默认Windows代码页。正如西欧和美洲一样。有很多原因可以通过编程方式更改默认的Console.OutputEncoding属性,许多文本文件将在1252中进行编码。或者chcp 1252
在启动程序之前从命令行键入(chcp == change code page)。
从1252支持的字符集中可以看出,Infinity符号不可用。因此,编码必须提出一个替代方案。这通常是?
不支持的Unicode代码点的标志符号,即8位编码的Encoding.EncoderFallback属性值。但是对于1252以及旧版MS-Dos 850和858代码页,Microsoft程序员决定使用8
。有趣的家伙。
字形是在控制台应用程序通常的代码页支持西方的机器上。437 与旧的IBM字符集匹配。发生此类编码灾难是发明Unicode的原因。可悲的是,要挽救控制台应用程序为时已晚,太多的代码依赖于默认的MS-Dos代码页。
将Double.PositiveInfinity转换为“∞”特定于Win10。在以前的Windows版本中,它曾经是“ Infinity”。通常可以通过“控制面板”>“语言”>“更改日期,时间或数字格式”>“其他设置”按钮修改这些格式,但是对话框中不包括无穷大符号选择。注册表(HKCU \ Control Panel \ International)也不包括在内,而是一个很大的疏忽。在本地winapi中为LOCALE_SPOSINFINITY。在.NET程序中,您可以通过克隆CultureInfo并更改其NumberFormatInfo.PositiveInfinitySymbol属性来以编程方式覆盖它。像这样:
using System;
using System.Text;
using System.Threading;
using System.Globalization;
class Program {
static void Main(string[] args) {
Console.OutputEncoding = Encoding.GetEncoding(1252);
var ci = (CultureInfo)Thread.CurrentThread.CurrentCulture.Clone();
ci.NumberFormat.NegativeInfinitySymbol = "-Infinity";
ci.NumberFormat.PositiveInfinitySymbol = "And beyond";
Thread.CurrentThread.CurrentCulture = ci;
Console.WriteLine(1 / 0.0);
Console.ReadLine();
}
}
∞
是无限的迹象。只需将其翻转90度即可看到它8