Código de repro:
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();
}
}
La página de códigos 1252 es un accidente bastante común en Inglaterra ya que es la página de códigos predeterminada de Windows allí. Como lo es para Europa Occidental y las Américas. Muchas razones para cambiar la propiedad predeterminada Console.OutputEncoding mediante programación, muchos archivos de texto se codificarán en 1252. O desde la línea de comandos escribiendo chcp 1252
(chcp == cambiar página de códigos) antes de iniciar el programa.
Como puede deducir del conjunto de caracteres admitido por 1252, el símbolo Infinito no está disponible. Entonces la codificación tiene que llegar a un sustituto. Ese es a menudo el ?
glifo para puntos de código Unicode no compatibles, el valor de la propiedad Encoding.EncoderFallback para codificaciones de 8 bits. Pero para 1252, y las antiguas páginas de códigos MS-Dos 850 y 858, el programador de Microsoft decidió 8
. Chico divertido.
El glifo es compatible con la página de códigos habitual para aplicaciones de consola en una máquina occidental. Que es 437, coincide con el juego de caracteres heredado de IBM . Tener este tipo de desastres de codificación es la razón por la cual se inventó Unicode. Lamentablemente, es demasiado tarde para rescatar aplicaciones de consola, demasiado código que dependía de la página de códigos MS-Dos predeterminada.
Tener Double.PositiveInfinity convertido a "∞" es específico de Win10. Solía ser "Infinito" en versiones anteriores de Windows. Este tipo de formatos normalmente se puede modificar con el Panel de control> Idioma> Cambiar formatos de fecha, hora o número> botón Configuración adicional, pero la selección del símbolo de infinito no se incluye en el cuadro de diálogo. Tampoco está cubierto por el registro (HKCU \ Control Panel \ International), sino una gran supervisión. Es LOCALE_SPOSINFINITY en el winapi nativo. En un programa .NET, puede anularlo mediante programación clonando CultureInfo y cambiando su propiedad NumberFormatInfo.PositiveInfinitySymbol. Me gusta esto:
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();
}
}
∞
es el signo del infinito. solo voltéalo 90 grados para verlo 88
personaje Unicode real , no extraño para infinito, girado 90 grados? Esto podría cambiar en función de su entorno local. Lo probé en dotnetfiddle.net y se imprimeInfinity
.Double.PositiveInfinity.ToString()[0] == '8'
. Hay algunos caracteres exóticos que se parecen mucho a otros en algunas fuentes. Además, ¿en qué idioma está configurada su computadora?8
(configuración regional en alemán).Console.Write("∞");