首頁  >  文章  >  後端開發  >  如何使用 Go 在 Windows 控制台中正確列印 UTF-8 字串?

如何使用 Go 在 Windows 控制台中正確列印 UTF-8 字串?

DDD
DDD原創
2024-11-01 01:23:28283瀏覽

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

使用Go 確保Windows 控制台中正確的字串輸出

問題:
使用Go 執行檔列印UTF-8 字元串時在Windows 控制台中,由於控制台的預設IBM850 編碼,使用者可能會遇到損壞的輸出。這可能會導致特殊字元顯示不正確。

解決方案:
為確保Windows 控制台中字串輸出準確,請使用以下程式碼:

<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>

此程式碼使用未記錄的Windows API函數將UTF-16編碼的字串直接寫入控制台,繞過預設編碼。這種方式保證了特殊字元的正確顯示。

用法:
在你的Go程式中,你可以直接呼叫consolePrintString函數來列印UTF-8編碼的字串,這樣就可以正確顯示顯示在Windows 控制台中。

以上是如何使用 Go 在 Windows 控制台中正確列印 UTF-8 字串?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn