問題:
使用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中文網其他相關文章!