Codieren von UTF-8-Zeichenfolgen für die Anzeige in Windows-Konsolen
Beim Ausführen einer Go-Programmdatei in einer Windows-Konsole können Zeichenfolgen mit Sonderzeichen angezeigt werden aufgrund der standardmäßigen IBM850-Kodierung der Konsole verstümmelt. So stellen Sie sicher, dass Zeichenfolgen korrekt codiert und angezeigt werden:
Lösung:
Verwenden Sie die WriteConsoleW-Funktion aus der Bibliothek kernel32.dll, um Breitzeichen (UTF-16) zu schreiben ) Zeichenfolgen direkt an die Konsole unter Umgehung der Standardkodierung.
Implementierung:
<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>
Beispiel:
<code class="go">package main import "fmt" func main() { consolePrintString("Hello ☺\n") consolePrintString("éèïöîôùòèìë\n") }</code>
Dieser Ansatz umgeht die Standardkodierung der Konsole und stellt so sicher, dass Zeichenfolgen mit Sonderzeichen korrekt angezeigt werden. Bitte beachten Sie, dass es Windows-spezifisch ist und die Verwendung undokumentierter Methoden beinhaltet.
Das obige ist der detaillierte Inhalt vonWie werden UTF-8-Zeichenfolgen in Windows-Konsolen korrekt angezeigt?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!