Dans certaines versions de Windows 10 (initiés à partir d'avril 2018 et également 1903 "normal"), il existe une nouvelle option appelée "Bêta: utilisez Unicode UTF-8 pour la prise en charge des langues dans le monde entier".
Vous pouvez voir cette option en allant dans Paramètres puis: Tous les paramètres -> Heure et langue -> Langue -> "Paramètres de langue administrative"
Voici à quoi ça ressemble:
Lorsque cette case est cochée, j'observe quelques irrégularités (ci-dessous) et Je voudrais savoir exactement ce que fait cette case et pourquoi cela se produit .
Créez une toute nouvelle application Windows Forms dans votre Visual Studio 2019. Sur le formulaire principal, spécifiez le gestionnaire pair Paint
comme suit:
private void Form1_Paint(object sender, PaintEventArgs e)
{
Font buttonFont = new Font("Webdings", 9.25f);
TextRenderer.DrawText(e.Graphics, "0r", buttonFont, new Point(), Color.Black);
}
Exécutez le programme, voici ce que vous verrez si la case n'est PAS cochée:
Cependant, si vous cochez la case (et redémarrez comme demandé), cela se transforme en:
Vous pouvez rechercher la police Webdings sur Wikipédia. Selon la table de caractères donnée, les codes de ces deux caractères sont "\U0001F5D5\U0001F5D9"
. Si je les utilise au lieu de "0r"
ça marche avec la case cochée mais sans la case cochée ça ressemble maintenant à ceci:
Je voudrais trouver une solution qui toujours fonctionne, que la case soit cochée ou décochée.
Cela peut-il être fait?
La plupart des API Windows C sont disponibles en deux variantes différentes:
Le conseil officiel de Microsoft n'est pas d'utiliser les versions "A", mais de s'assurer que votre code utilise toujours les variantes "W". De cette façon, vous êtes censé obtenir un comportement cohérent, quel que soit le pays/la langue de l'utilisateur configuré.
Cependant, il semble que cette case à cocher fasse plus d'une chose. Il est clair qu'il est censé changer la "page de codes ANSI" en 65001, ce qui signifie UTF-8. Il semble que cela change également le rendu des polices pour être plus Unicody.
Je vous suggère de détecter si GetACP () == 65001 , puis dessinez la version Unicode de vos chaînes, sinon dessinez l'ancienne version "0r". Je ne sais pas comment tu fais ça depuis .NET ...