Maison > développement back-end > Golang > Comment puis-je lire correctement les fichiers texte UTF-16 dans Go, en gérant à la fois les encodages BOM et non-BOM ?

Comment puis-je lire correctement les fichiers texte UTF-16 dans Go, en gérant à la fois les encodages BOM et non-BOM ?

Susan Sarandon
Libérer: 2024-12-27 15:32:11
original
327 Les gens l'ont consulté

How Can I Correctly Read UTF-16 Text Files in Go, Handling Both BOM and Non-BOM Encodings?

Lecture d'un fichier texte UTF-16 sous forme de chaîne dans Go

Lors de la lecture de fichiers texte UTF-16 dans Go, vous pouvez rencontrer des problèmes avec les octets interprétés comme ASCII. Cela se produit parce que la fonction bufio.NewReader standard ne gère pas correctement l'Unicode.

Solution

UTF-16 avec BOM

La dernière version de "golang.org/x /text/encoding/unicode" introduit unicode.BOMOverride, qui détecte et interprète automatiquement la nomenclature pour décoder correctement l'UTF-16. Voici un exemple utilisant ReadFileUTF16() :

func ReadFileUTF16(filename string) ([]byte, error) {
    raw, err := ioutil.ReadFile(filename)
    if err != nil {
        return nil, err
    }
    win16be := unicode.UTF16(unicode.BigEndian, unicode.IgnoreBOM)
    utf16bom := unicode.BOMOverride(win16be.NewDecoder())
    unicodeReader := transform.NewReader(bytes.NewReader(raw), utf16bom)
    decoded, err := ioutil.ReadAll(unicodeReader)
    return decoded, err
}
Copier après la connexion

Cette fonction décodera les fichiers UTF-16 avec une nomenclature.

UTF-16 sans BOM

Si votre fichier le fait ne contient pas de nomenclature, vous pouvez utiliser le code suivant :

func ReadFileUTF16WithoutBOM(filename string) ([]byte, error) {
    f, err := os.Open(filename)
    if err != nil {
        return nil, err
    }
    r := bufio.NewReader(f)

    // Read past the BOM, if any.
    var b, e = r.Peek(2)
    if (b[0] == 0xFF && b[1] == 0xFE) || (b[0] == 0xFE && b[1] == 0xFF) {
        r.Discard(2)
    }

    // Read the rest of the file.
    decoded, err := ioutil.ReadAll(r)
    return decoded, err
}
Copier après la connexion

Cette fonction ignorera toute nomenclature et lisez le fichier au format UTF-16.

Conclusion

En utilisant ReadFileUTF16() ou ReadFileUTF16WithoutBOM(), vous pouvez gérer à la fois les fichiers texte BOM et non-BOM UTF-16 dans Go, en garantissant décodage et représentation précis de vos données.

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