Repro code:
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 page de Code 1252 est une jolie commune accident en Angleterre puisque c'est la valeur par défaut page de code Windows. Comme il l'est pour l'Ouest de l'Europe et les Amériques. Beaucoup de raisons de modifier la valeur par défaut de la Console.OutputEncoding propriété de la programmation, de nombreux fichiers de texte est encodé en 1252. Ou en ligne de commande en tapant chcp 1252
(rssa == modifier la page de code) avant de commencer le programme.
Comme vous pouvez le dire à partir du jeu de caractères pris en charge par 1252, le symbole de l'Infini n'est pas disponible. Ainsi, le Codage doit venir avec un substitut. C'est souvent l' ?
glyphe non pris en charge Unicode codepoints, l'Encodage.EncoderFallback valeur de la propriété pour 8-bit encodages. Mais pour 1252, et l'héritage de MS-Dos 850 et 858 pages de code, le programmeur Microsoft a décidé de 8
. Drôle de type.
Le glyphe est pris en charge dans l'habitude de la page de code de la console apps sur l'Ouest de la machine. Qui est 437, correspond à l'héritage IBM jeu de caractères. Avoir ce genre de codage des catastrophes est pourquoi Unicode a été inventé. Malheureusement trop tard pour sauver la console d'applications, beaucoup trop de code autour de qui s'appuient sur la valeur par défaut de MS-Dos de la page de code.
Avoir Le Double.PositiveInfinity convertis "∞" est spécifique à Win10. Il sert à être "Infini" dans les versions précédentes de Windows. Ces types de formats peuvent normalement être modifié avec Panneau de configuration > Langue > Changement de date, d'heure ou de numéro de formats > Paramètres Supplémentaires le bouton, mais le symbole de l'infini de sélection n'est pas inclus dans la boîte de dialogue. Également pas couverts par la base de registre (HKCU\Control Panel\International), plutôt une grande surveillance. Il est LOCALE_SPOSINFINITY dans le natif winapi. Dans une .NET programme, vous pouvez le remplacer par programmation par clonage CultureInfo et la modification de son NumberFormatInfo.PositiveInfinitySymbol de la propriété. Comme ceci:
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();
}
}