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 ?
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.
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 }
Cette fonction décodera les fichiers UTF-16 avec une nomenclature.
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 }
Cette fonction ignorera toute nomenclature et lisez le fichier au format UTF-16.
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!