Учитывая следующий пример:
func main() {
buf := new(bytes.Buffer)
enc := json.NewEncoder(buf)
toEncode := []string{"hello", "wörld"}
enc.Encode(toEncode)
fmt.Println(buf.String())
}
Я хотел бы, чтобы вывод был представлен с экранированными символами Юникода:
["hello", "w \ u00f6rld"]
Вместо:
["hello", "wörld"]
Я попытался написать функцию для цитирования Unicodeсимволов, использующих strconv.QuoteToASCII
, и передают результаты в Encode()
, однако это приводит к двойному экранированию:
func quotedUnicode(data []string) []string {
for index, element := range data {
quotedUnicode := strconv.QuoteToASCII(element)
// get rid of additional quotes
quotedUnicode = strings.TrimSuffix(quotedUnicode, "\"")
quotedUnicode = strings.TrimPrefix(quotedUnicode, "\"")
data[index] = quotedUnicode
}
return data
}
["hello", "w \\ u00f6rld"]
Как я могу убедиться, что выходные данные из json.Encode содержат правильно экранированные символы Unicode?