Masalah:
Apabila menggunakan boleh laku Go untuk mencetak rentetan UTF-8 dalam konsol Windows, pengguna mungkin menghadapi output rosak disebabkan pengekodan IBM850 lalai konsol. Ini boleh menyebabkan aksara khas dipaparkan secara tidak betul.
Penyelesaian:
Untuk menjamin output rentetan yang tepat dalam konsol Windows, gunakan kod berikut:
<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>
Kod ini menggunakan fungsi Windows API tanpa dokumen untuk menulis rentetan dikodkan UTF-16 terus ke konsol, memintas pengekodan lalai. Pendekatan ini memastikan bahawa aksara khas dipaparkan dengan betul.
Penggunaan:
Dalam program Go anda, anda boleh terus memanggil fungsi consolePrintString untuk mencetak rentetan berkod UTF-8 yang akan dikodkan dengan betul dipaparkan dalam konsol Windows.
Atas ialah kandungan terperinci Bagaimana untuk Mencetak Rentetan UTF-8 dengan Betul dalam Konsol Windows menggunakan Go?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!