Comment détecter l'encodage d'un fichier texte?

J'essaie de détecter l'encodage des caractères est utilisé dans mon fichier.

J'ai essayer avec ce code pour obtenir la norme d'encodage

public static Encoding GetFileEncoding(string srcFile)
{
//*** Use Default of Encoding.Default (Ansi CodePage)
Encoding enc = Encoding.Default;
//*** Detect byte order mark if any - otherwise assume default
byte[] buffer = new byte[5];
FileStream file = new FileStream(srcFile, FileMode.Open);
file.Read(buffer, 0, 5);
file.Close();
if (buffer[0] == 0xef && buffer[1] == 0xbb && buffer[2] == 0xbf)
enc = Encoding.UTF8;
else if (buffer[0] == 0xfe && buffer[1] == 0xff)
enc = Encoding.Unicode;
else if (buffer[0] == 0 && buffer[1] == 0 && buffer[2] == 0xfe && buffer[3] == 0xff)
enc = Encoding.UTF32;
else if (buffer[0] == 0x2b && buffer[1] == 0x2f && buffer[2] == 0x76)
enc = Encoding.UTF7;
else if (buffer[0] == 0xFE && buffer[1] == 0xFF)      
//1201 unicodeFFFE Unicode (Big-Endian)
enc = Encoding.GetEncoding(1201);      
else if (buffer[0] == 0xFF && buffer[1] == 0xFE)      
//1200 utf-16 Unicode
enc = Encoding.GetEncoding(1200);
return enc;
}

Mes cinq premiers octets sont 60, 118, 56, 46 et 49.

Est-il un tableau qui montre le codage correspond à ceux des cinq premiers octets?

  • La marque d'ordre d'octet ne doit pas être utilisé pour détecter des encodages. Il ya des cas où il est ambigu dont l'encodage est utilisé: UTF-16 LE et UTF-32 LE les deux commencent par les deux mêmes octets. La NOMENCLATURE doit seulement être utilisé pour détecter d'ordre des octets (d'où son nom). Aussi en UTF-8, à strictement parler, ne devrait même pas avoir une marque d'ordre d'octet et en ajoutant un peut interférer avec certains logiciels qui ne s'y attendent pas.
  • Bayers, donc c'est il possible que je peux detech sorcière de codage sont utiliser dans mon fichier ?
  • Byers: UTF-32 LE démarre avec les mêmes 2 octets en UTF-16 LE. Cependant, il suit également avec des octets 00 00 qui est (je pense très) peu probable en UTF-16 LE. Aussi, la NOMENCLATURE, en théorie, devrait indiquer que vous dites, mais dans la pratique, il agit comme une signature pour montrer ce que l'encodage. Voir: unicode.org/faq/utf_bom.html#bom4
  • Est le UTF7 NOMENCLATURE en fait une chose réelle? J'ai essayé de faire un UTF7Encoding objet et effectuer GetPreamble (), et il a renvoyé un tableau vide. Et contrairement à utf8 il n'a pas un paramètre de constructeur pour elle.
  • Marque Beyers: Votre commentaire est COMPLÈTEMENT faux. La NOMENCLATURE est une preuve de balle de manière à détecter l'encodage. UTF16 ÊTRE et UTF32 be ne sont pas ambigus. Vous devez étudier le sujet avant d'écrire de mauvais commentaires. Si un logiciel ne gère pas de l'utf-8 BOM alors ce logiciel est fom les années 1980 ou mal programmé. Aujourd'hui, chaque logiciel doit manipuler et à reconnaître BOM.
  • Double Possible de Comment puis-je détecter l'encodage/codepage d'un fichier texte
  • Elmue a clairement jamais utilisé lot de filtrage, la concaténation, et le tuyau de redirection de flux de fichiers de texte. Il est irréaliste de poignée/support Nomenclatures dans de tels scénarios.