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

Comment afficher correctement les chaînes UTF-8 dans les consoles Windows ?

DDD
DDDoriginal
2024-11-02 21:55:30511parcourir

How to Display UTF-8 Strings Correctly in Windows Consoles?

Encodage des chaînes UTF-8 pour l'affichage dans les consoles Windows

Lors de l'exécution d'un exécutable Go dans une console Windows, des chaînes avec des caractères spéciaux peuvent apparaître mutilé en raison de l'encodage IBM850 par défaut de la console. Voici comment vous assurer que les chaînes sont correctement encodées et affichées :

Solution :

Utilisez la fonction WriteConsoleW de la bibliothèque kernel32.dll pour écrire des caractères larges (UTF-16 ) chaînes directement sur la console, en contournant l'encodage par défaut.

Implémentation :

<code class="go">import (
    "syscall"
    "unicode/utf16"
    "unsafe"
)

// Declare the WriteConsoleW function
var procWriteConsoleW = syscall.NewLazyDLL("kernel32.dll").NewProc("WriteConsoleW")

// Define a function to print a UTF-8 string to the console
func consolePrintString(strUtf8 string) {
    // Convert the UTF-8 string to UTF-16
    strUtf16 := utf16.Encode([]rune(strUtf8))

    // Write 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(nil)),
        uintptr(0),
        0)
}</code>

Exemple :

<code class="go">package main

import "fmt"

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

Cette approche contourne l'encodage par défaut de la console, garantissant que les chaînes contenant des caractères spéciaux sont correctement affichées. Veuillez noter qu'il est spécifique à Windows et implique l'utilisation de méthodes non documentées.

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