Rumah >pembangunan bahagian belakang >Golang >golang json Kod kacau Cina

golang json Kod kacau Cina

PHPz
PHPzasal
2023-05-10 15:37:391007semak imbas

Bahasa Go ialah bahasa pengaturcaraan bahagian belakang yang sangat popular Ia mempunyai prestasi yang sangat baik dan mempunyai perpustakaan standard yang kaya dan pustaka pihak ketiga Ia mempunyai prestasi yang baik dalam mengendalikan komunikasi rangkaian, konkurensi, pangkalan data, dll. Walau bagaimanapun, semasa memproses data format JSON, anda mungkin menghadapi masalah aksara Cina yang kacau-bilau.

1. Punca aksara Cina JSON yang kacau

JSON (JavaScript Object Notation) ialah format pertukaran data ringan yang mewakili data dalam bentuk pasangan nilai kunci. Di Golang, kita boleh menggunakan pakej pengekodan/json dalam pustaka standard untuk mengekod dan menyahkod JSON.

Apabila kami cuba mengekod struktur data yang mengandungi bahasa Cina ke dalam JSON dan mengembalikannya kepada pelanggan, aksara Cina yang bercelaru mungkin muncul, seperti kod berikut:

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)
}

Dalam kod di atas, kami define Fungsi pengendali dicipta, dengan data ialah struktur data jenis rentetan peta, yang mengandungi pasangan nilai kunci Cina. Kami mengekodnya ke dalam data berformat JSON menggunakan fungsi json.Marshal dan mengembalikannya kepada klien melalui fungsi fmt.Fprintf.

Walau bagaimanapun, apabila kami mengakses program dalam penyemak imbas, kami akan mendapati bahawa bahasa Cina dalam data JSON output telah menjadi kacau.

Ini kerana Golang menggunakan pengekodan UTF-8 secara lalai untuk pengekodan JSON, manakala pengekodan lalai yang digunakan oleh penyemak imbas ialah GBK atau GB2312. Oleh itu, dalam data JSON yang dikembalikan oleh pelayan, penyemak imbas tidak dapat mengenal pasti kaedah pengekodan dengan betul, mengakibatkan masalah aksara Cina yang kacau.

2. Penyelesaian

Untuk menyelesaikan masalah aksara Cina yang kacau dalam Golang JSON, kita perlu menetapkan pengepala respons HTTP yang betul pada bahagian pelayan dan menentukan kaedah pengekodan set aksara yang betul apabila mengembalikan data JSON. Biasanya, ini harus ditetapkan kepada UTF-8.

Berikut ialah kod yang diubah suai:

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)
}

Dalam kod di atas, kami menggunakan fungsi Header() http.ResponseWriter untuk menetapkan pengepala respons HTTP dan menetapkan Content-Type kepada " application/json; charset=utf-8" untuk menentukan kaedah pengekodan set aksara yang betul, dengan itu mengelakkan masalah aksara Cina yang kacau.

3. Ringkasan

Golang ialah bahasa pengaturcaraan bahagian belakang yang sangat berkuasa dengan pustaka standard yang kaya dan fungsi pengekodan dan penyahkodan JSONnya juga sangat berkuasa. Apabila menggunakan Golang untuk memproses data JSON, perhatian khusus harus diberikan kepada kaedah pengekodan set aksara untuk mengelakkan masalah seperti aksara Cina yang kacau. Dalam pembangunan sebenar, kami boleh melaraskan kaedah pengekodan set aksara mengikut senario aplikasi sebenar untuk memenuhi keperluan yang berbeza.

Atas ialah kandungan terperinci golang json Kod kacau Cina. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn