Maison  >  Article  >  développement back-end  >  Comment générer correctement des chaînes UTF-8 dans une console Windows avec Go ?

Comment générer correctement des chaînes UTF-8 dans une console Windows avec Go ?

Linda Hamilton
Linda Hamiltonoriginal
2024-11-01 10:55:02837parcourir

How to Correctly Output UTF-8 Strings in a Windows Console with Go?

Sortir correctement des chaînes dans une console Windows avec Go

Lors de la création d'un exécutable Go qui génère des chaînes codées en UTF-8 avec des caractères spéciaux, il est important de prendre en compte l'encodage par défaut utilisé par les consoles Windows, qui est IBM850 (page de codes 850). Cela peut entraîner une sortie mutilée en raison d'encodages de caractères incorrects.

Pour garantir une sortie correcte dans une console Windows, l'approche suivante peut être implémentée :

<code class="go">package main

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

// Retrieve a function pointer from the kernel32.dll library.
var procWriteConsoleW = syscall.NewProc("WriteConsoleW")

// Custom function to print strings directly to the console.
func consolePrintString(strUtf8 string) {
    // Encode the string into UTF-16 for Windows console compatibility.
    var strUtf16 []uint16
    strUtf16 = utf16.Encode([]rune(strUtf8))

    if len(strUtf16) < 1 {
        return
    }

    // Initialize the number of characters written to zero.
    var charsWritten uint32 = 0

    // Call WriteConsoleW to print the UTF-16 string to the console.
    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() {
    // Example strings to output to the console.
    consolePrintString("Hello ☺\n")
    consolePrintString("éèïöîôùòèìë\n")
}</code>

En appelant notre fonction consolePrintString personnalisée, les chaînes sont imprimées directement sur la console en utilisant le codage de caractères correct, garantissant la sortie attendue des caractères spéciaux.

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