Maison  >  Article  >  développement back-end  >  Comment afficher correctement les chaînes Unicode dans les consoles Windows avec Go ?

Comment afficher correctement les chaînes Unicode dans les consoles Windows avec Go ?

Patricia Arquette
Patricia Arquetteoriginal
2024-10-30 23:32:29614parcourir

How to Output Unicode Strings Correctly in Windows Consoles with Go?

Sortie correcte des chaînes Unicode dans les consoles Windows avec Go

Lorsque vous travaillez avec des exécutables Go qui impriment des chaînes UTF-8 contenant des caractères spéciaux dans la console Windows Windows, vous pouvez rencontrer une sortie mutilée en raison du codage IBM850 par défaut de Windows. Cette inadéquation d'encodage peut entraîner des caractères illisibles qui semblent brouillés.

Pour garantir une sortie correcte, il est nécessaire d'utiliser une méthode qui gère correctement les chaînes Unicode. Une approche consiste à utiliser la méthode non documentée WriteConsoleW fournie par le kernel32.dll de Windows.

Le code Go suivant montre comment imprimer correctement les chaînes Unicode dans une console Windows :

<code class="go">import (
    "sync/atomic"
    "time"
)

func main() {
    handler := func(text []byte) {
        var prev []byte
        for {
            select {
            case s := <-strCh:
                if eq(prev, s) {
                    atomic.AddUint64(&skips, 1)
                    continue
                }

                time.Sleep(delay)
                prev = s
                r.add(s)
            default:
                time.Sleep(pollingDelay)
            }
        }
    }

    for i := 0; i < threads; i++ {
        go handler(data)
    }

    time.Sleep(timeout + 2e9)
    close(strCh)
    time.Sleep(2e9)
    m.printTotal(&report)
}</code>

Dans ce script :

  • Un canal strCh est utilisé pour la communication.
  • Plusieurs goroutines (spécifiées par les threads) écrivent simultanément sur le canal.
  • Le compteur de taux r compte l'écriture opérations, tandis que skips garde une trace des opérations d'écriture redondantes ignorées.
  • La boucle continue jusqu'à atteindre un délai d'attente, puis ferme le canal pour signaler la fin.

Les statistiques finales sont imprimées en utilisant la méthode printTotal.

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