2011-09-04 6 views
2

J'ai une question. Ce code ouvre bien les fichiers txt avec du texte anglais, mais quand j'essaie d'ouvrir les fichiers txt avec du texte cyrillique ... les symboles cyrilliques sont des "carrés". Est-il possible de résoudre ce problème?Comment ouvrir correctement les fichiers UTF-8 dans RichTextBox?

 string fileData = openFileDialog1.FileName; 
     StreamReader sr = new StreamReader(fileData); 
     richTextBox.Text = sr.ReadToEnd(); 
     sr.Close(); 

     SavedFile = saveFileDialog1.FileName; 
     dataTextBox.SaveFile(SavedFile, RichTextBoxStreamType.PlainText); 

Solution:

 string fileData = openFileDialog1.FileName; 
     StreamReader sr = new StreamReader(fileData, Encoding.Default); 
     richTextBox.Text = sr.ReadToEnd(); 
     sr.Close(); 
+0

Vous avez raison! Le codage de mon document était ANSI. Mais alors pourquoi le bloc-notes de Windows peut voir les symboles, mais RichTextBox - pas? – user922907

+0

Notepad détecte heureusement l'encodage, il ne suppose pas toujours que tous les fichiers sont UTF8 –

Répondre

2

Et vous que le fichier est UTF8, non? Si vous écrivez la chaîne str = sr.ReadToEnd();, placez un point d'arrêt sur la ligne suivante et regardez str dans Visual Studio, le texte cyrillique s'affiche-t-il correctement? Essayez d'ouvrir le fichier dans le bloc-notes, Fichier-> Enregistrer sous et sélectionnez UTF8 comme encodage. La raison pour laquelle notepad est capable de "lire" le fichier est qu'il utilise la page de codes utilisateur, et dans votre cas c'est probablement la page de codes Windows-1251 (cyrillique). StreamReader essaie de lire le fichier en tant que UTF8. Si vous le souhaitez, vous pouvez forcer StreamReader à utiliser une page de codes différente. Le deuxième paramètre est le Encoding que vous souhaitez utiliser. Vous passez le Encoding.GetEncoding(1251) pour cyrillique. Malheureusement, vous devez connaître le Encoding "a priori" (= avant) la lecture du fichier.

+0

Le texte était en ANSI. Lorsque je le convertis en UTF8 dans le Bloc-notes, il commence bien ouvert. – user922907

+0

Le bloc-notes n'affiche pas la page de codes. Pour ANSI, il signifie "le code local d'un octet un codepage". Si vous allez ici http://en.wikipedia.org/wiki/Code_page#Windows_.28ANSI.29_code_pages, vous verrez qu'il n'y a pas une seule page de code ANSI. – xanatos

+0

Ok! J'ai compris. – user922907

1

StreamWriter, lu par défaut au format de codage UTF-8, sauf indication contraire. Essayez de convertir le texte en codage Windows et essayez de le lire à nouveau avec le même code.

+0

Ok! La RichTextBox ouvre bien UTF8. Mon texte était en ANSI. Est-il possible d'ouvrir les fichiers ANSI aussi sans aucun problème? – user922907

+0

Oui S'il s'agit d'un code ASCII. – MduSenthil

Questions connexes