我在 json.Marshal 的字符串列表中得到了这个:
json: invalid UTF-8 in string: "...ole\xc5\"
原因很明显,但是如何在 Go 中删除/替换这些字符串?我一直在阅读关于 unicode
和 unicode/utf8
包的文档,但似乎没有明显/快速的方法。
例如,在 Python 中,您有一些方法可以删除无效字符,将其替换为指定字符或严格设置,这会在无效字符上引发异常。我怎样才能在 Go 中做同样的事情?
更新:我的意思是得到异常的原因( panic ?) - json.Marshal 期望是有效的 UTF-8 字符串中的非法字符。
(非法字节序列如何进入该字符串并不重要,通常的方式 - 错误、文件损坏、其他不符合 unicode 的程序等)
最佳答案
在 Go 1.13+ 中,您可以这样做:
strings.ToValidUTF8("a\xc5z", "")
在 Go 1.11+ 中,使用 Map function 也很容易做到这一点。和 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
Playground : Here .
关于json - 从字符串中删除无效的 UTF-8 字符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20401873/