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

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

Patricia Arquette
Patricia Arquetteオリジナル
2024-10-30 23:32:29616ブラウズ

How to Output Unicode Strings Correctly in Windows Consoles with Go?

Go を使用して Windows コンソールで Unicode 文字列を正しく出力する

Windows コンソールで特殊文字を含む UTF-8 文字列を出力する Go 実行可能ファイルを使用する場合Windows では、Windows のデフォルトの IBM850 エンコーディングが原因で出力が破損する場合があります。このエンコーディングの不一致により、文字がスクランブルされて読めなくなる可能性があります。

適切な出力を保証するには、Unicode 文字列を正しく処理するメソッドを採用する必要があります。 1 つのアプローチは、Windows の kernel32.dll によって提供される文書化されていないメソッド WriteConsoleW を利用することです。

次の Go コードは、Windows コンソールで Unicode 文字列を正しく出力する方法を示しています。

<code class="go">import (
    "sync/atomic"
    "time"
)

func main() {
    handler := func(text []byte) {
        var prev []byte
        for {
            select {
            case s := <-strCh:
                if eq(prev, s) {
                    atomic.AddUint64(&skips, 1)
                    continue
                }

                time.Sleep(delay)
                prev = s
                r.add(s)
            default:
                time.Sleep(pollingDelay)
            }
        }
    }

    for i := 0; i < threads; i++ {
        go handler(data)
    }

    time.Sleep(timeout + 2e9)
    close(strCh)
    time.Sleep(2e9)
    m.printTotal(&report)
}</code>

この中でscript:

  • strCh チャネルは通信に使用されます。
  • 複数のゴルーチン (スレッドによって指定される) が同時にチャネルに書き込みます。
  • r レート カウンターは書き込みをカウントします。
  • ループはタイムアウトに達するまで継続し、終了を通知するためにチャネルを閉じます。

最終的な統計は、次を使用して出力されます。 printTotal メソッド。

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

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