ホームページ >バックエンド開発 >Golang >golang json 中国語の文字化けコード

golang json 中国語の文字化けコード

PHPz
PHPzオリジナル
2023-05-10 15:37:391055ブラウズ

Go 言語は非常に人気のあるバックエンド プログラミング言語です。優れたパフォーマンスを備え、豊富な標準ライブラリとサードパーティ ライブラリを備えており、ネットワーク通信、同時実行、データベースなどの処理で優れたパフォーマンスを発揮します。しかし、JSON形式のデータを処理する場合、Golang JSONで中国語が文字化けする問題の原因と解決策を紹介することを目的としています。

1. JSON 中国語文字化けの原因

JSON (JavaScript Object Notation) は、キーと値のペアの形式でデータを表す軽量のデータ交換形式です。 Golang では、標準ライブラリの encoding/json パッケージを使用して JSON をエンコードおよびデコードできます。

中国語を含むデータ構造を JSON にエンコードしてクライアントに返そうとすると、次のコードのように中国語の文字化けが表示される場合があります。

import (
    "encoding/json"
    "fmt"
    "net/http"
)

func handler(w http.ResponseWriter, r *http.Request) {
    data := map[string]string{
        "name": "张三",
        "age":  "18",
    }
    jsonData, err := json.Marshal(data)
    if err != nil {
        http.Error(w, err.Error(), http.StatusInternalServerError)
        return
    }
    fmt.Fprintf(w, "JSON Data: %s", string(jsonData))
}

func main() {
    http.HandleFunc("/", handler)
    http.ListenAndServe(":8080", nil)
}

上記のコードでは、定義 ハンドラー関数が作成されます。データは、中国語のキーと値のペアを含む、map[string]string 型のデータ構造です。 json.Marshal 関数を使用してそれを JSON 形式のデータにエンコードし、fmt.Fprintf 関数を介してクライアントに返します。

しかし、ブラウザでプログラムにアクセスすると、出力された JSON データの中国語が文字化けしていることがわかります。

これは、Golang が JSON エンコードにデフォルトで UTF-8 エンコードを使用し、ブラウザで使用されるデフォルトのエンコードが GBK または GB2312 であるためです。そのため、サーバーから返されるJSONデータは、ブラウザがエンコード方式を正しく識別できず、中国語が文字化けする問題が発生します。

2. 解決策

Golang JSON における中国語の文字化けの問題を解決するには、サーバー上で正しい HTTP 応答ヘッダーを設定し、応答時に正しい文字セット エンコード方式を指定する必要があります。 JSONデータを返します。通常はUTF-8に設定してください。

以下は変更されたコードです:

import (
    "encoding/json"
    "fmt"
    "net/http"
)

func handler(w http.ResponseWriter, r *http.Request) {
    data := map[string]string{
        "name": "张三",
        "age":  "18",
    }
    jsonData, err := json.Marshal(data)
    if err != nil {
        http.Error(w, err.Error(), http.StatusInternalServerError)
        return
    }
    w.Header().Set("Content-Type", "application/json; charset=utf-8")
    fmt.Fprintf(w, "JSON Data: %s", string(jsonData))
}

func main() {
    http.HandleFunc("/", handler)
    http.ListenAndServe(":8080", nil)
}

上記のコードでは、http.ResponseWriter の Header() 関数を使用して HTTP 応答ヘッダーを設定し、Content-Type を「」に設定します。 application/json; charset=utf-8」を使用して正しい文字セットのエンコード方法を指定することで、中国語の文字化けの問題を回避できます。

3. 概要

Golang は、強力なパフォーマンス、豊富な標準ライブラリとサードパーティ ライブラリを備えた非常に強力なバックエンド プログラミング言語であり、JSON エンコードおよびデコード機能も非常に強力です。 Golang を使用して JSON データを処理する場合は、中国語の文字化けなどの問題を回避するために、文字セットのエンコード方法に特別な注意を払う必要があります。実際の開発では、実際のアプリケーションシナリオに応じて文字セットのエンコード方法を柔軟に調整し、さまざまなニーズに対応できます。

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

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