Heim >Backend-Entwicklung >Golang >Wie drucke ich UTF-8-Zeichenfolgen in einer Windows-Konsole mit Go korrekt?
Problem:
Bei Verwendung einer ausführbaren Go-Datei zum Drucken von UTF-8-Zeichenfolgen Wenn Benutzer eine Windows-Konsole verwenden, kann es aufgrund der standardmäßigen IBM850-Kodierung der Konsole zu einer fehlerhaften Ausgabe kommen. Dies kann dazu führen, dass Sonderzeichen falsch angezeigt werden.
Lösung:
Um eine genaue String-Ausgabe in einer Windows-Konsole zu gewährleisten, verwenden Sie den folgenden Code:
<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>
Dieser Code verwendet undokumentierte Windows-API-Funktionen, um UTF-16-codierte Zeichenfolgen direkt in die Konsole zu schreiben und dabei die Standardcodierung zu umgehen. Dieser Ansatz stellt sicher, dass Sonderzeichen korrekt angezeigt werden.
Verwendung:
In Ihrem Go-Programm können Sie die consolePrintString-Funktion direkt aufrufen, um UTF-8-codierte Zeichenfolgen ordnungsgemäß zu drucken wird in der Windows-Konsole angezeigt.
Das obige ist der detaillierte Inhalt vonWie drucke ich UTF-8-Zeichenfolgen in einer Windows-Konsole mit Go korrekt?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!