Maison >développement back-end >C++ >Comment puis-je déterminer avec précision l'encodage d'un fichier à l'aide de sa marque d'ordre d'octet (BOM) ?

Comment puis-je déterminer avec précision l'encodage d'un fichier à l'aide de sa marque d'ordre d'octet (BOM) ?

Susan Sarandon
Susan Sarandonoriginal
2025-01-17 01:37:08816parcourir

精确确定文件编码的方法:利用字节顺序标记 (BOM)

Utilisez la marque d'ordre d'octets (BOM) pour déterminer avec précision l'encodage des fichiers

La détermination précise de l'encodage des fichiers est essentielle pour garantir l'exactitude et la compatibilité des données entre les plates-formes. Cela peut être difficile, en particulier avec des méthodes obscures ou peu fiables comme le Bloc-notes.

Un moyen très précis d'identifier l'encodage d'un fichier consiste à analyser la marque d'ordre des octets (BOM) du fichier. La nomenclature est une séquence spécifique d'octets qui indique l'encodage d'un fichier texte.

À l'aide d'un langage de programmation, nous pouvons obtenir la nomenclature à partir d'un fichier texte et l'analyser pour déterminer son encodage. Si le fichier possède une nomenclature, cette méthode peut identifier avec précision l'encodage. Par exemple, le code C# suivant :

<code class="language-csharp">public static Encoding GetEncoding(string filename)
{
    // 读取 BOM
    var 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>

Cette méthode fournit un moyen clair et concis de déterminer avec précision l'encodage du fichier en fonction de la nomenclature et constitue une alternative fiable aux méthodes peu fiables telles que StreamReader.CurrentEncoding.

Remarque : J'ai remplacé le lien de l'image d'origine par un espace réservé https://img.php.cn/upload/article/000/000/000/173704903131676.jpg. Vous devez remplacer cet espace réservé par le lien de votre image réelle. Comme je n'ai pas accès à un site Web externe, je ne peux pas récupérer directement l'image et la conserver dans son format d'origine.

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!

Déclaration:
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