Question

J'utilise la classe StreamReader dans .NET comme ceci:

using( StreamReader reader = new StreamReader( "c:\somefile.html", true ) {
    string filetext = reader.ReadToEnd();
}

Cela fonctionne bien lorsque le fichier a une nomenclature. J'ai couru des ennuis avec un fichier sans BOM .. fondamentalement, je suis charabia. Quand je spécifié Encoding.Unicode il a bien fonctionné, par exemple:

using( StreamReader reader = new StreamReader( "c:\somefile.html", Encoding.Unicode, false ) {
    string filetext = reader.ReadToEnd();
}

Alors, je dois obtenir le contenu du fichier dans une chaîne. Alors, comment les gens gèrent habituellement cela? Je sais qu'il n'y a pas de solution qui fonctionne 100% du temps, mais je voudrais améliorer mes chances .. il y a évidemment un logiciel qui il essaie de deviner (par exemple, bloc-notes, navigateurs, etc.). Y at-il une méthode dans le cadre de .NET qui devinera pour moi? Quelqu'un at-il un code qu'ils aimeraient partager?

Plus d'arrière-plan: Ce question est à peu près la même que la mienne, mais je suis dans la terre .NET. Cette question m'a conduit à un blog encodage détection bibliothèques , mais aucune ne .NET

Autres conseils

Vous devriez lire cet article par Raymond Chen. Il va dans les détails sur la façon dont les programmes peuvent deviner ce qu'est un encodage (et une partie du plaisir qui vient de deviner)

http://blogs.msdn.com/oldnewthing /archive/2004/03/24/95235.aspx

J'ai eu bonne chance avec Pude , un port C# de Mozilla Universal Charset Detector.

UTF-8 est conçu de sorte qu'il est peu probable d'avoir un texte codé dans un 8bit codant arbitraire comme latin1 décodé à unicode appropriée en utilisant UTF-8.

Ainsi, l'approche minimale est ce (pseudo-code, je ne parle pas .NET):

essayer:    u = some_text.decode ( "UTF-8") sauf UnicodeDecodeError:    u = some_text.decode ( "la plus probable-encodage")

Pour l'on utilise habituellement codant pour le plus probable par exemple latin1 ou CP1252 ou autre. Des approches plus sophistiquées pourraient essayer et trouver des appariements de caractères spécifiques à une langue, mais je ne suis pas au courant de quelque chose qui fait que comme une bibliothèque ou une telle.

J'ai utilisé ce faire quelque chose d'un certain temps semblable:

http://www.conceptdevelopment.net/Localization/NCharDet/

Utilisez IsTextUnicode Win32.

Dans le sens général, il est difficile promlem. Voir: http://blogs.msdn.com/oldnewthing/ archives / 2007/04/17 / 2158334.aspx .

Une technique aki peut-être prendre un MD5 du texte, puis décoder le texte et ré-encoder dans divers encodages, MD5'ing chacun. Si l'on vous correspond le deviner est que l'encodage.

C'est évidemment trop lent pour quelque chose qui gère un grand nombre de fichiers, mais pour quelque chose comme un éditeur de texte que je pouvais le voir travailler.

Autre que ça, ça va être les mains sales portage des bibliothèques java

Voir ma (récente) réponse à cette question (pour autant que je peux dire, équivalent) question: Comment puis-je détecter l'encodage / codepage d'un fichier texte

Il ne tente pas de deviner à travers une gamme d'encodages possibles « nationaux » comme MLang et NCharDet faire, mais suppose que vous savez quel genre de fichiers non-unicode vous êtes susceptible de rencontrer. Pour autant que je peux dire de votre question, il doit répondre à votre problème assez fiable (sans compter sur la « boîte noire » de MLang).

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top