Maison > développement back-end > C++ > Comment déterminer de manière fiable l'encodage d'un fichier à l'aide de sa marque d'ordre d'octet (BOM) ?

Comment déterminer de manière fiable l'encodage d'un fichier à l'aide de sa marque d'ordre d'octet (BOM) ?

Linda Hamilton
Libérer: 2025-01-17 01:32:09
original
424 Les gens l'ont consulté

How to Reliably Determine a File's Encoding Using its Byte Order Mark (BOM)?

Identifier avec précision l'encodage des fichiers : méthodes pratiques

L'identification correcte de l'encodage des fichiers est cruciale pour le traitement de texte. Cependant, l'attribut StreamReader.CurrentEncoding ne fournit souvent pas de résultats précis. Pour résoudre ce problème, une méthode plus fiable consiste à analyser la marque d’ordre des octets (BOM) du fichier.

Le rôle de la nomenclature

La BOM est une séquence d'octets qui indique le caractère boutien et l'encodage d'un fichier texte. Les nomenclatures courantes incluent :

  • UTF-8 :EF BB BF
  • UTF-16LE :FF FE
  • UTF-16BE : FE FF
  • UTF-32LE :FF FE 00 00
  • UTF-32BE :00 00 FE FF
  • ASCII : Pas de nomenclature

Déterminer l'encodage des fichiers en fonction de la nomenclature

Le code C# suivant fournit une implémentation détaillée :

<code class="language-csharp">public static Encoding GetEncoding(string filename)
{
    // 读取 BOM
    byte[] bom = new byte[4];
    using (var file = new FileStream(filename, FileMode.Open, FileAccess.Read))
    {
        file.Read(bom, 0, 4);
    }

    // 分析 BOM
    if (bom[0] == 0x2b && bom[1] == 0x2f && bom[2] == 0x76) return Encoding.UTF7;
    if (bom[0] == 0xef && bom[1] == 0xbb && bom[2] == 0xbf) return Encoding.UTF8;
    if (bom[0] == 0xff && bom[1] == 0xfe && bom[2] == 0 && bom[3] == 0) return Encoding.UTF32; //UTF-32LE
    if (bom[0] == 0xff && bom[1] == 0xfe) return Encoding.Unicode; //UTF-16LE
    if (bom[0] == 0xfe && bom[1] == 0xff) return Encoding.BigEndianUnicode; //UTF-16BE
    if (bom[0] == 0 && bom[1] == 0 && bom[2] == 0xfe && bom[3] == 0xff) return new UTF32Encoding(true, true);  //UTF-32BE

    // 如果未检测到 BOM,则回退到 ASCII
    return Encoding.ASCII;
}</code>
Copier après la connexion

En utilisant cette méthode, vous pouvez identifier avec précision l'encodage de n'importe quel fichier texte, garantissant ainsi une interprétation correcte des données et un traitement du texte.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal