我在字符串列表的 json.Marshal 上得到了這個:json: invalid UTF-8 in string: "...ole\xc5\"原因很明顯,但是如何在 Go 中刪除/替換這些字符串?我一直在閱讀 docstunicode和unicode/utf8包,似乎沒有明顯/快速的方法來做到這一點。例如,在 Python 中,您有方法可以刪除無效字符,替換為指定字符或嚴格設置,這會在無效字符上引發(fā)異常。如何在 Go 中做等效的事情?更新:我的意思是得到異常的原因(恐慌?) - json.Marshal 期望是有效的 UTF-8 字符串中的非法字符。(非法字節(jié)序列如何進入該字符串并不重要,通常的方式 - 錯誤、文件損壞、其他不符合 unicode 的程序等)
2 回答

白衣染霜花
TA貢獻1796條經(jīng)驗 獲得超10個贊
在 Go 1.13+ 中,你可以這樣做:
strings.ToValidUTF8("a\xc5z", "")
在 Go 1.11+ 中,使用Map 函數(shù)和utf8.RuneError也很容易做到這一點,如下所示:
fixUtf := func(r rune) rune {
if r == utf8.RuneError {
return -1
}
return r
}
fmt.Println(strings.Map(fixUtf, "a\xc5z"))
fmt.Println(strings.Map(fixUtf, "posic?o"))
輸出:
az
posico
- 2 回答
- 0 關(guān)注
- 451 瀏覽
添加回答
舉報
0/150
提交
取消