2009-12-25 7 views
0

J'essaie d'afficher ascii-art dans une zone de texte. Si j'ouvre un fichier spécifique dans .nfo bloc-notes avec la police « Lucida Console », 9pt, régulière, il ressemble à ceci:C# problème de police de texte: même police semble complètement différente dans l'application, puis dans le bloc-notes

http://i48.tinypic.com/24zvvnr.png

Dans mon application, je mis la police de la zone de texte à « Lucida console », 9 pt, régulière, il ressemble à ceci:

http://i49.tinypic.com/2ihq8h0.png

Qu'est-ce que je fais mal? (Ou - Que dois-je faire pour l'obtenir à ressembler dans le bloc-notes?)

+0

Je ne suis pas un pirate, je veux juste être en mesure de montrer ascii-art dans mon application. J'ai utilisé un exemple .nfo car c'était le fichier le plus facile à trouver qui utilise le jeu de caractères étendu. – Led

+1

Il semble certainement indiquer que vous êtes, à tout le moins, en train de télécharger des fissures logicielles. Peut-être serait-il préférable d'utiliser quelque chose de moins incriminant en postant ici. – spender

+1

Si vous regardez le fichier nfo, il spécifie toujours les cartes adlib. Ceci est en fait un nfo d'une collection en ligne antique nfo accessible au public (les gens recueillant des nfo pour l'histoire), probablement 15 ans;) – Led

Répondre

7

Votre problème peut se résumer comme suit: ASCII n'est pas UTF-8, et UTF-8 n'est pas ASCII.

Le constructeur StreamReader(string) initialise le StreamReader pour utiliser Encoding.UTF8, qui est un décodeur UTF-8 qui tente silencieusement de résoudre les caractères non valides. Un coup d'œil rapide à the Wikipedia page for .nfo files révèle que la plupart des fichiers .nfo sont généralement codés en Extended ASCII (aka Code Page 437). Alors que les 127 premiers caractères de l'ASCII correspondent aux 127 premiers bits de l'UTF-8, les codages sont et non et vous obtiendrez des caractères incorrects si vous en utilisez un où l'autre est attendu.

Vous voulez probablement:

System.Text.Encoding encoding = System.Text.Encoding.GetEncoding(437); 
System.IO.StreamReader file = new System.IO.StreamReader(fileName, encoding); 
+0

Vous, monsieur, êtes un héros! Fonctionne comme un charme, et maintenant je comprends l'importance d'utiliser le bon encodage :) Merci beaucoup! – Led

+0

Pas de problème, content de pouvoir aider. –

2

Vous lisez probablement le fichier avec le mauvais codage.

Comment ouvrez-vous le fichier?

+0

en utilisant System.IO.StreamReader file = new System.IO.StreamReader (inFileName); puis seulement ReadLine jusqu'à la fin. Devrais-je spécifier un encodage quelque part? – Led

+0

Ouvrez le fichier dans VS, cliquez sur Fichier, Options d'enregistrement avancées et vérifiez le codage réel. – SLaks

+0

Ensuite, je vois quel est le codage de ce fichier, mais y a-t-il un encodage général que je peux utiliser pour tous les fichiers ascii-art ..? – Led

Questions connexes