ホームページ  >  記事  >  バックエンド開発  >  golang が中国語の文字化けを出力する

golang が中国語の文字化けを出力する

王林
王林オリジナル
2023-05-10 13:10:391279ブラウズ

golang開発において、出力エンコーディングが設定されていない場合、中国語が文字化けする問題が発生する場合があります。以下では、golang で中国語が文字化けして出力される問題を、出力エンコーディングの原理と出力エンコーディングの設定の 2 つの側面から解決する方法を紹介します。

1. 出力エンコーディングの原則

golang では、中国語の文字を含むすべての文字列は UTF-8 エンコーディングで保存されます。 UTF-8 は、Unicode 標準の任意の文字を表すことができる可変長 Unicode エンコーディングです。したがって、golang プログラムで使用する漢字は、実際には UTF-8 エンコーディングの形式でメモリに保存されます。

golang で書かれたプログラムを端末、ファイル、Web ページ、またはその他の出力デバイスに出力する必要がある場合、UTF-8 エンコーディングをターゲットのエンコーディングに変換する必要があります。通常、端末またはファイル出力デバイスは、デフォルトでローカル エンコーディングを使用してテキストを出力します。たとえば、Windows オペレーティング システムはデフォルトで GBK エンコーディングを使用し、Linux オペレーティング システムはデフォルトで UTF-8 エンコーディングを使用します。

golang プログラムの UTF-8 エンコードが正しく変換されて出力されない場合、中国語の文字化けが発生する場合があります。これは、ターゲット エンコーディングが UTF-8 エンコーディングの中国語文字を正しく認識できず、出力テキストが正しく表示されないためです。

したがって、golang で出力される中国語文字化けの問題を解決するには、ターゲット エンコーディングが UTF-8 でエンコードされた中国語文字を正しく認識できるように出力エンコーディングを設定する必要があります。

2. 出力エンコーディングの設定

golangでは、出力デバイスによって出力エンコーディングの設定方法が異なります。以下に端末、ファイル、Webページそれぞれの出力エンコードを設定する方法を紹介します。

  1. 端末出力エンコーディングの設定

golang では、fmt パッケージの Println メソッドを使用して文字列を端末に出力します。端末の出力エンコーディングを設定する必要がある場合は、os.Stdout 属性の Fprintln メソッドを使用して、書式設定パラメーターを設定できます。

たとえば、Windows システムでは、次のように端末出力エンコーディングを GBK コードに設定します。

package main

import (
    "fmt"
    "os"
)

func main() {
    stdout := os.Stdout

    fmt.Println("Hello 世界!")
}

次に、fmt パッケージの Println メソッドを使用して、UTF-8 でエンコードされた中国語文字列を出力します。 "こんにちは世界 !"。

上記のコードを実行すると、ターミナル出力結果は次のようになります。

123
Hello 世界!
  1. ファイル出力エンコーディングを設定します

Golang では、 os パッケージ ファイルを作成し、bufio パッケージの NewWriter メソッドを使用してバッファ ファイル ライターを作成し、出力ファイルのエンコーディングを設定します。

たとえば、Windows システムでは、出力ファイルのエンコーディングを GBK に設定するコードは次のとおりです。

package main

import (
    "bufio"
    "os"
)

func main() {
    file, err := os.Create("output.txt")
    if err != nil {
        panic(err)
    }
    defer file.Close()

    writer := bufio.NewWriter(file)

    writer.WriteString("Hello 世界!")
    writer.Flush()
}

上記のコードでは、まず、 os パッケージのメソッドを作成し、defer ステートメントを使用してファイル ハンドルを閉じるのを遅らせます。

上記のコードを実行し、output.txt ファイルの内容を確認します。

123
Hello 世界!
  1. Web ページの出力エンコーディングを設定します

golang では、net を使用します。 /http パッケージのライター インターフェイスは、HTTP 応答を出力するためにクラス ResponseWriter の Write メソッドを実装します。

Web ページの出力エンコードを設定する必要がある場合は、最初に HTTP 応答ヘッダーの Content-Type 属性を設定し、次に Write メソッドを使用して UTF-8 エンコードされたテキストを出力する必要があります。

たとえば、Windows システムでは、Web ページの出力エンコーディングを GBK に設定するコードは次のとおりです。

package main

import (
    "io"
    "net/http"
)

func main() {
    http.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) {
        w.Header().Set("Content-Type", "text/html; charset=gbk")
        io.WriteString(w, "<html><head><meta charset='gbk'></head><body>Hello 世界!</body></html>")
    })
    http.ListenAndServe(":8080", nil)
}

上記のコードでは、最初に net/ の HandleFunc メソッドを使用します。 http パッケージは、HTTP リクエスト処理機能を登録します。ルートパスにアクセスする場合、HTTPレスポンスヘッダーのContent-Type属性を「text/html; charset=gbk」に設定し、ioパッケージのWriteStringメソッドを使用してHTMLテキスト「100db36a723c770d327fc0aef2ce13b1b2fd9731e4387dcdad41cc2c367f7100b0cf166b29c794cd7527b4a311bef2e99c3bca370b5104690d9ef395f2c5f8d16c04bd5ca3fcae76e30b72ad730ca86dHello world!36cc49f0c466276486e50c850b7e495673a6ac4ed44ffec12cee46588e518a5e"、

最後に、http パッケージの ListenAndServe メソッドを使用して HTTP サーバーを起動し、ローカル 8080 ポートをリッスンします。

上記のコードを実行して http://localhost:8080 にアクセスすると、Hello world! が表示されるはずです。テキストは Web ページに表示され、Web ページの文字セットは GBK に設定されます。 charsetパラメータをUTF-8に変更すると中国語文字化けが発生します。

まとめ

golangプログラムで中国語が文字化けして出力される問題を回避するには、出力時に出力エンコーディングを正しく設定する必要があります。出力デバイスが異なると、異なる設定方法を使用する必要があります。ターミナルに出力するには、os.Stdout の Fprintln メソッドを使用してフォーマット パラメータを設定する必要があります。ファイルに出力するには、bufio パッケージのバッファ ファイル ライターの WriteString メソッドを使用する必要があります。 Web ページでは、HTTP 応答ヘッダーの Content-Type 属性を設定し、応答ライターの Write メソッドを使用して HTML テキストを出力する必要があります。

以上がgolang が中国語の文字化けを出力するの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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