Heim >Backend-Entwicklung >Golang >Wie drucke ich UTF-8-Zeichenfolgen in einer Windows-Konsole mit Go korrekt?

Wie drucke ich UTF-8-Zeichenfolgen in einer Windows-Konsole mit Go korrekt?

DDD
DDDOriginal
2024-11-01 01:23:28356Durchsuche

How to Print UTF-8 Strings Correctly in a Windows Console using Go?

Gewährleistung der ordnungsgemäßen Zeichenfolgenausgabe in Windows-Konsolen mit Go

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!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn