Maison >développement back-end >Golang >Comment imprimer correctement les chaînes UTF-8 dans une console Windows à l'aide de Go ?

Comment imprimer correctement les chaînes UTF-8 dans une console Windows à l'aide de Go ?

DDD
DDDoriginal
2024-11-01 01:23:28349parcourir

How to Print UTF-8 Strings Correctly in a Windows Console using Go?

Garantir une sortie de chaîne appropriée dans les consoles Windows avec Go

Problème :
Lors de l'utilisation d'un exécutable Go pour imprimer des chaînes UTF-8 dans une console Windows, les utilisateurs peuvent rencontrer une sortie mutilée en raison du codage IBM850 par défaut de la console. Cela peut entraîner un affichage incorrect des caractères spéciaux.

Solution :
Pour garantir une sortie de chaîne précise dans une console Windows, utilisez le code suivant :

<code class="go">// Alert: This method utilizes undocumented methods and does not handle stdout redirection or error checking.
// Use with caution.

package main

import (
    "syscall"
    "unicode/utf16"
    "unsafe"
)

var modkernel32 = syscall.NewLazyDLL("kernel32.dll")
var procWriteConsoleW = modkernel32.NewProc("WriteConsoleW")

func consolePrintString(strUtf8 string) {
    strUtf16 := utf16.Encode([]rune(strUtf8))
    if len(strUtf16) == 0 {
        return
    }

    var charsWritten *uint32
    syscall.Syscall6(procWriteConsoleW.Addr(), 5,
        uintptr(syscall.Stdout),
        uintptr(unsafe.Pointer(&strUtf16[0])),
        uintptr(len(strUtf16)),
        uintptr(unsafe.Pointer(charsWritten)),
        uintptr(0),
        0)
}

func main() {
    consolePrintString("Hello ☺\n")
    consolePrintString("éèïöîôùòèìë\n")
}</code>

Ce code utilise des fonctions API Windows non documentées pour écrire des chaînes codées en UTF-16 directement sur la console, en contournant l'encodage par défaut. Cette approche garantit que les caractères spéciaux sont affichés correctement.

Utilisation :
Dans votre programme Go, vous pouvez appeler directement la fonction consolePrintString pour imprimer des chaînes codées en UTF-8 qui seront correctement affiché dans la console Windows.

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