我在字符串列表的 json.Marshal 上得到了这个:json: invalid UTF-8 in string: "...ole\xc5\"原因很明显,但是如何在 Go 中删除/替换这些字符串?我一直在阅读 docstunicode和unicode/utf8包,似乎没有明显/快速的方法来做到这一点。例如,在 Python 中,您有方法可以删除无效字符,替换为指定字符或严格设置,这会在无效字符上引发异常。如何在 Go 中做等效的事情?更新:我的意思是得到异常的原因(恐慌?) - json.Marshal 期望是有效的 UTF-8 字符串中的非法字符。(非法字节序列如何进入该字符串并不重要,通常的方式 - 错误、文件损坏、其他不符合 unicode 的程序等)
2 回答
白衣染霜花
TA贡献1796条经验 获得超10个赞
在 Go 1.13+ 中,你可以这样做:
strings.ToValidUTF8("a\xc5z", "")
在 Go 1.11+ 中,使用Map 函数和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 关注
- 367 浏览
添加回答
举报
0/150
提交
取消