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

Windows コンソールで UTF-8 文字列を正しく表示するにはどうすればよいですか?

DDD
リリース: 2024-11-02 21:55:30
オリジナル
572 人が閲覧しました

How to Display UTF-8 Strings Correctly in Windows Consoles?

Windows コンソールで表示するための UTF-8 文字列のエンコード

Windows コンソールで Go 実行可能ファイルを実行すると、特殊文字を含む文字列が表示される場合がありますコンソールのデフォルトの IBM850 エンコーディングが原因で壊れています。文字列が正しくエンコードされ、表示されていることを確認する方法は次のとおりです。

解決策:

kernel32.dll ライブラリの WriteConsoleW 関数を利用してワイド文字 (UTF-16) を書き込みます。 ) デフォルトのエンコーディングをバイパスして、文字列をコンソールに直接送信します。

実装:

<code class="go">import (
    "syscall"
    "unicode/utf16"
    "unsafe"
)

// Declare the WriteConsoleW function
var procWriteConsoleW = syscall.NewLazyDLL("kernel32.dll").NewProc("WriteConsoleW")

// Define a function to print a UTF-8 string to the console
func consolePrintString(strUtf8 string) {
    // Convert the UTF-8 string to UTF-16
    strUtf16 := utf16.Encode([]rune(strUtf8))

    // Write 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(nil)),
        uintptr(0),
        0)
}</code>
ログイン後にコピー

例:

<code class="go">package main

import "fmt"

func main() {
    consolePrintString("Hello ☺\n")
    consolePrintString("éèïöîôùòèìë\n")
}</code>
ログイン後にコピー

このアプローチは、コンソールのデフォルトのエンコーディングをバイパスし、特殊文字を含む文字列が正しく表示されるようにします。これは Windows 固有であり、文書化されていないメソッドの使用が含まれることに注意してください。

以上がWindows コンソールで UTF-8 文字列を正しく表示するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート