Maison  >  Article  >  développement back-end  >  Comment lire des fichiers Unicode avec et sans nomenclatures dans Go ?

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

DDD
DDDoriginal
2024-11-07 11:49:03109parcourir

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>

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>

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!

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