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
Libérer: 2025-01-17 01:37:08
original
815 Les gens l'ont consulté

精确确定文件编码的方法:利用字节顺序标记 (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>
Copier après la connexion

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!

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