Maison > développement back-end > Golang > le corps du texte

Comment lire des fichiers Unicode avec et sans nomenclatures dans Go ?

DDD
Libérer: 2024-11-07 11:49:03
original
185 Les gens l'ont consulté

How to Read Unicode Files with and Without BOMs in Go?

Lecture de fichiers avec nomenclature dans Go

Question :

Comment puis-je lire des fichiers Unicode contenant ou manquant des marques d'ordre d'octets (BOM) dans Go ? Existe-t-il une méthode standard pour gérer cela ?

Réponse :

Les bibliothèques standard de Go ne fournissent pas de méthode dédiée pour la gestion des nomenclatures. Voici deux approches pour implémenter cette fonctionnalité vous-même :

Approche du lecteur tamponné :

Le package bufio offre une solution pratique pour gérer les nomenclatures. Vous pouvez envelopper un lecteur tamponné autour de votre flux de données et inspecter la première rune :

<code class="go">import (
    "bufio"
    "os"
)

func main() {
    fd, err := os.Open("filename")
    if err != nil {
        // Handle error
    }

    br := bufio.NewReader(fd)
    r, _, err := br.ReadRune()
    if err != nil {
        // Handle error
    }

    if r != '\uFEFF' {
        br.UnreadRune() // Not a BOM -- put the rune back
    }
}</code>
Copier après la connexion

Si la première rune n'est pas une nomenclature, vous pouvez continuer la lecture à partir du lecteur tamponné comme prévu.

Approche de l'interface Seeker :

Pour les objets implémentant l'interface io.Seeker (tels que os.File), vous pouvez vérifier directement les trois premiers octets et revenir au début s'il y a pas de nomenclature :

<code class="go">import (
    "os"
)

func main() {
    fd, err := os.Open("filename")
    if err != nil {
        // Handle error
    }

    bom := [3]byte
    _, err = io.ReadFull(fd, bom[:])
    if err != nil {
        // Handle error
    }

    if bom[0] != 0xef || bom[1] != 0xbb || bom[2] != 0xbf {
        _, err = fd.Seek(0, 0) // Not a BOM -- seek back to the beginning
        if err != nil {
            // Handle error
        }
    }
}</code>
Copier après la connexion

Notez que cette approche suppose un encodage UTF-8. Pour les autres encodages, une manipulation plus complexe est nécessaire.

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
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal