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

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

DDD
DDDオリジナル
2024-11-01 01:23:28286ブラウズ

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

Go を使用して Windows コンソールで適切な文字列出力を確認する

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

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