J'essaie de détecter quel est le codage des caractères utilisé dans mon fichier.
J'essaie avec ce code d'obtenir l'encodage standard
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.
Existe-t-il un tableau qui montre quel encodage correspond à ces cinq premiers octets ?
4 votes
La marque d'ordre des octets ne doit pas être utilisée pour détecter les codages. Il y a des cas où il est ambigu de savoir quel encodage est utilisé : UTF-16 LE et UTF-32 LE commencent tous deux par les deux mêmes octets. La BOM ne devrait être utilisée que pour détecter l'ordre des octets (d'où son nom). De plus, l'UTF-8 ne devrait pas, à proprement parler, avoir de marque d'ordre des octets et en ajouter une peut interférer avec certains logiciels qui ne l'attendent pas.
0 votes
@Mark Bayers, y a-t-il un moyen de savoir quel encodage est utilisé dans mon fichier ?
5 votes
@Mark Byers : UTF-32 LE commence avec les mêmes 2 octets que UTF-16 LE. Cependant, il suit également avec les octets 00 00 ce qui est (je pense très) improbable dans UTF-16 LE. De plus, la BOM en théorie devrait indiquer ce que vous dites, mais en pratique, elle agit comme une signature pour montrer quel est l'encodage. Voir : unicode.org/faq/utf_bom.html#bom4
0 votes
La nomenclature UTF7 existe-t-elle vraiment ? J'ai essayé de créer un objet UTF7Encoding et d'exécuter GetPreamble() sur celui-ci, et il a retourné un tableau vide. Et contrairement à l'UTF8, il n'y a pas de paramètre de construction pour cet objet.
3 votes
Mark Beyers : Votre commentaire est COMPLÈTEMENT faux. La nomenclature est un moyen infaillible de détecter l'encodage. UTF16 BE et UTF32 BE ne sont pas ambigus. Vous devriez étudier le sujet avant d'écrire des commentaires erronés. Si un logiciel ne gère pas le BOM UTF8, c'est qu'il date des années 1980 ou qu'il est mal programmé. Aujourd'hui, tous les logiciels devraient gérer et reconnaître les BOM's.
0 votes
Duplicata possible de Comment détecter l'encodage/codepage d'un fichier texte ?
1 votes
Elmue n'a clairement jamais utilisé le filtrage par lot, la concaténation et la redirection par tuyau de flux de fichiers en texte clair. Il n'est pas réaliste de gérer/supporter des nomenclatures dans de tels scénarios.