Rumah >pembangunan bahagian belakang >Golang >Bagaimana untuk Mencetak Rentetan UTF-8 dengan Betul dalam Konsol Windows menggunakan Go?

Bagaimana untuk Mencetak Rentetan UTF-8 dengan Betul dalam Konsol Windows menggunakan Go?

DDD
DDDasal
2024-11-01 01:23:28359semak imbas

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

Memastikan Output Rentetan yang Betul dalam Konsol Windows dengan Go

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!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn