ホームページ >バックエンド開発 >Golang >Go を使用して Windows コンソールで UTF-8 文字列を正しく出力するにはどうすればよいですか?

Go を使用して Windows コンソールで UTF-8 文字列を正しく出力するにはどうすればよいですか?

Linda Hamilton
Linda Hamiltonオリジナル
2024-11-01 10:55:02919ブラウズ

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 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。