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!