Lire les fichiers txt (en unicode et utf8) au moyen de C #
J'ai créé deux fichiers txt (bloc-notes de windows) avec le même contenu "merci - спасибо" et enregistré en utf8 et unicode. Dans le bloc-notes, ils ont l'air bien. Ensuite, j'ai essayé de les lire à l'aide .Net:
...File.ReadAllText(utf8FileFullName, Encoding.UTF8);
et
...File.ReadAllText(unicodeFileFullName, Encoding.Unicode);
Mais dans les deux cas j'ai eu cette "merci - ???????". Quel est le problème?
Upd:
code utf8
static void Main(string[] args)
{
var encoding = Encoding.UTF8;
var file = new FileInfo(@"D:\encodes\enc.txt");
Console.OutputEncoding = encoding;
var content = File.ReadAllText(file.FullName, encoding);
Console.WriteLine("encoding: " + encoding);
Console.WriteLine("content: " + content);
Console.ReadLine();
}
Résultat:
grâce ÑпаÑÐбо
source d'informationauteur mtkachenko
Vous devez vous connecter pour publier un commentaire.
Édité comme
UTF8
doit prendre en charge les caractères. Il semble que vous êtes de la sortie d'une console ou d'un endroit qui n'a pas eu son encodage. Si oui, vous devez définir l'encodage. Pour la console, vous pouvez le faireLors de la sortie de l'Unicode ou UTF-8 caractères multi-octets à la console, vous aurez besoin de définir l'encodage ainsi que de s'assurer que la console dispose d'un ensemble de police qui prend en charge les caractères multi-octets pour afficher le glyphe. Avec votre code existant une MessageBox.Show(le contenu) ou de les afficher sur un Windows ou d'un Formulaire Web semble correctement.
Ont un coup d'oeil à http://msdn.microsoft.com/en-us/library/system.console.aspx pour une explication sur la configuration des polices dans la fenêtre de la console.
"Support de l'Unicode des caractères nécessite le codeur pour la reconnaissance d'un caractère Unicode, et exige également une police dont les caractères nécessaires pour rendre ce personnage. Pour réussir à afficher les caractères Unicode de la console, la console de police doit être réglé à un non-raster ou une police TrueType comme Consolas ou Lucida Console."
Comme une note de côté, vous pouvez utiliser la classe FileStream pour lire les trois premiers octets du fichier et regarder pour la marque d'ordre d'octet indicateur de définir automatiquement l'encodage lors de la lecture du fichier. Par exemple, si l'octet[0] == 0xEF && byte[1] == 0xBB && byte[2] == 0xBF alors vous avez une codé en UTF-8 fichier. Reportez-vous à http://en.wikipedia.org/wiki/Byte_order_mark pour plus d'informations.
Utiliser le type d'Encodage par Défaut
Il va corriger les
????
Chracters.