Maison >développement back-end >Golang >golang produit des caractères chinois tronqués

golang produit des caractères chinois tronqués

王林
王林original
2023-05-10 13:10:391323parcourir

Dans le développement de Golang, si l'encodage de sortie n'est pas défini, le problème des caractères chinois tronqués peut survenir. Ci-dessous, je vais vous présenter comment résoudre le problème de la sortie de caractères chinois tronqués par Golang sous deux aspects : le principe de codage de sortie et la définition du codage de sortie.

1. Principe d'encodage de sortie

Dans Golang, toutes les chaînes sont stockées en codage UTF-8, y compris les caractères chinois. UTF-8 est un codage Unicode de longueur variable qui peut représenter n'importe quel caractère de la norme Unicode. Par conséquent, les caractères chinois que nous utilisons dans les programmes Golang sont en fait stockés en mémoire sous la forme d'un encodage UTF-8.

Lorsque nous devons générer un programme écrit en Golang vers un terminal, un fichier, une page Web ou un autre périphérique de sortie, nous devons convertir l'encodage UTF-8 en encodage cible. En règle générale, un terminal ou un périphérique de sortie de fichier utilisera le codage local par défaut pour générer du texte. Par exemple, le système d'exploitation Windows utilise le codage GBK par défaut et le système d'exploitation Linux utilise le codage UTF-8 par défaut.

Si l'encodage UTF-8 du programme golang n'est pas correctement converti lors de la sortie, des caractères chinois tronqués peuvent apparaître. En effet, le codage cible ne peut pas reconnaître correctement les caractères chinois dans le codage UTF-8, ce qui entraîne un affichage incorrect du texte de sortie.

Par conséquent, afin de résoudre le problème de la sortie de caractères chinois tronqués par Golang, nous devons définir l'encodage de sortie pour permettre à l'encodage cible de reconnaître correctement les caractères chinois codés en UTF-8.

2. Définir l'encodage de sortie

Dans Golang, la méthode de définition de l'encodage de sortie varie en fonction du périphérique de sortie. Ci-dessous, nous expliquons comment définir respectivement le codage de sortie des terminaux, des fichiers et des pages Web.

  1. Définir l'encodage de sortie du terminal

Dans Golang, utilisez la méthode Println du package fmt pour afficher une chaîne sur le terminal. Si vous devez définir le codage de sortie du terminal, nous pouvons utiliser la méthode Fprintln de l'attribut os.Stdout et définir les paramètres de formatage.

Par exemple, sous le système Windows, définissez l'encodage de sortie du terminal sur le code GBK comme suit :

package main

import (
    "fmt"
    "os"
)

func main() {
    stdout := os.Stdout

    fmt.Println("Hello 世界!")
}

Ensuite, utilisez la méthode Println du package fmt pour afficher la chaîne chinoise encodée en UTF-8 "Hello World!".

Exécutez le code ci-dessus, le résultat de la sortie du terminal devrait être :

123
Hello 世界!
  1. Définissez l'encodage de sortie du fichier

Dans Golang, utilisez la méthode Create du package os pour créer le fichier et utilisez la méthode NewWriter de le package bufio pour créer un importateur d'écriture de fichier tampon, vous pouvez définir l'encodage du fichier de sortie.

Par exemple, sous le système Windows, le code pour définir l'encodage du fichier de sortie sur GBK est le suivant :

package main

import (
    "bufio"
    "os"
)

func main() {
    file, err := os.Create("output.txt")
    if err != nil {
        panic(err)
    }
    defer file.Close()

    writer := bufio.NewWriter(file)

    writer.WriteString("Hello 世界!")
    writer.Flush()
}

Dans le code ci-dessus, nous utilisons d'abord la méthode Create du package os pour créer le fichier de sortie output.txt, et utilisez l'instruction defer pour retarder la fermeture du descripteur de fichier.

Exécutez le code ci-dessus et vérifiez le contenu du fichier output.txt. Il devrait être :

123
Hello 世界!
  1. Définissez l'encodage de sortie de la page Web

Dans Golang, utilisez l'interface d'écriture du package net/http pour implémenter le Méthode d'écriture de la classe ResponseWriter pour générer une réponse HTTP.

Si vous devez définir le codage de sortie de la page Web, nous devons d'abord définir l'attribut Content-Type de l'en-tête de réponse HTTP, puis utiliser la méthode Write pour générer du texte codé en UTF-8.

Par exemple, sous le système Windows, le code pour définir l'encodage de sortie de la page Web sur GBK est le suivant :

package main

import (
    "io"
    "net/http"
)

func main() {
    http.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) {
        w.Header().Set("Content-Type", "text/html; charset=gbk")
        io.WriteString(w, "<html><head><meta charset='gbk'></head><body>Hello 世界!</body></html>")
    })
    http.ListenAndServe(":8080", nil)
}

Dans le code ci-dessus, nous utilisons d'abord la méthode HandleFunc du package net/http pour enregistrer le traitement de la requête HTTP. fonction. Lors de l'accès au chemin racine, définissez l'attribut Content-Type de l'en-tête de réponse HTTP sur "text/html; charset=gbk", puis utilisez la méthode WriteString du package io pour afficher le texte HTML "100db36a723c770d327fc0aef2ce13b1ef0c2772b76bfffb9337fc47aea795edb0cf166b29c794cd7527b4a311bef2e99c3bca370b5104690d9ef395f2c5f8d16c04bd5ca3fcae76e30b72ad730ca86dBonjour tout le monde 36cc49f0c466276486e50c850b7e495673a6ac4ed44ffec12cee46588e518a5e", notez qu'il existe un

Enfin, nous utilisons la méthode ListenAndServe du package http pour démarrer le serveur HTTP et écouter le port local 8080.

Exécutez le code ci-dessus et visitez http://localhost:8080, vous devriez pouvoir voir le Hello world! Le texte est affiché sur la page Web et le jeu de caractères de la page Web est défini sur GBK. Si le paramètre charset est modifié en UTF-8, des caractères chinois tronqués apparaîtront.

Résumé

Afin d'éviter le problème du programme Golang produisant des caractères chinois tronqués, nous devons définir correctement l'encodage de sortie lors de la sortie. Pour différents périphériques de sortie, nous devons utiliser différentes méthodes de configuration. Pour sortir dans le terminal, nous devons utiliser la méthode Fprintln de os.Stdout et définir les paramètres de formatage ; pour sortir dans un fichier, nous devons utiliser la méthode WriteString du rédacteur de fichiers tampon du package bufio ; page Web, nous devons définir l'attribut Content-Type de l'en-tête de réponse HTTP et utiliser la méthode Write de l'auteur de la réponse pour générer le texte HTML.

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
Article précédent:Et GolangArticle suivant:Et Golang