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

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

Linda Hamilton
Linda Hamilton原創
2024-11-01 10:55:02837瀏覽

How to Correctly Output UTF-8 Strings in a Windows Console with Go?

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

建立輸出帶有特殊字元的UTF-8 編碼字串的Go 執行檔時,請考慮預設編碼非常重要由Windows 控制台使用,即IBM850(代碼頁850)。由於字元編碼不正確,這可能會導致輸出損壞。

為了確保Windows 控制台中的正確輸出,可以實現以下方法:

<code class="go">package main

import (
    "syscall"
    "unsafe"
    "unicode/utf16"
)

// Retrieve a function pointer from the kernel32.dll library.
var procWriteConsoleW = syscall.NewProc("WriteConsoleW")

// Custom function to print strings directly to the console.
func consolePrintString(strUtf8 string) {
    // Encode the string into UTF-16 for Windows console compatibility.
    var strUtf16 []uint16
    strUtf16 = utf16.Encode([]rune(strUtf8))

    if len(strUtf16) < 1 {
        return
    }

    // Initialize the number of characters written to zero.
    var charsWritten uint32 = 0

    // Call WriteConsoleW to print 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(&charsWritten)),
        uintptr(0),
        0)
}

func main() {
    // Example strings to output to the console.
    consolePrintString("Hello ☺\n")
    consolePrintString("éèïöîôùòèìë\n")
}</code>

透過呼叫我們的自訂consolePrintString 函數,使用正確的字元編碼將字串直接列印到控製台,確保特殊字元的預期輸出。

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

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