と一致するように:エスケープUnicode文字出力は、私はJSONをエンコードする場合、私はユニコードエスケープ文字列を取得するには、Pythonの2.7でPythonの
>>> import json
>>> s = {"text": "三杯雞"}
>>> print(json.dumps(s))
それは、この出力を与える:
{"text": "\u4e09\u676f\u96de"}
しかし中、同様のコードを行く:
package main
import (
"encoding/json"
"fmt"
)
type Food struct {
Name string `json:"name"`
}
func main() {
food := Food{Name: "三杯雞"}
v, _ := json.Marshal(food)
fmt.Println(string(v))
}
はこれを与える:
{"name":"三杯雞"}
中国語の文字はエスケープされません。私はPythonからGoにAPIエンドポイントを移植しています - どうすればPythonと同じエスケープされた出力を得ることができますか?
私はstrconv.QuoteToASCII
を使用してバリエーションを試してみましたが、彼らはUnicodeはダブルエスケープであることになる:
func main() {
s := strconv.QuoteToASCII("三杯雞")
s = strings.Trim(s, "\"")
food := Food{Name: s}
v, _ := json.Marshal(food)
fmt.Println(string(v))
}
出力:
{"name":"\\u4e09\\u676f\\u96de"}
本当に重要ですか?両方のJSONファイルは有効で、互いに同等です。 http://ideone.com/e8Zipj –
@Robᵩ良い質問ですが、おそらくそうではありません...あなたの例では、Pythonの 'json.loads'関数がそれを同等のオブジェクト表現に読み込むことしか証明していません。生のJSON文字列を印刷することで、見た目の違うものが得られます。私は、APIクライアントが表現形式を変更したことに気づかずに、内部変更のために野生のAPIクライアントを中断させたくありません。彼らは何をしているのか分かっています:) –