json - 从字符串中删除无效的 UTF-8 字符

标签 json unicode go

我在 json.Marshal 的字符串列表中得到了这个:

json: invalid UTF-8 in string: "...ole\xc5\"

原因很明显,但是如何在 Go 中删除/替换这些字符串?我一直在阅读关于 unicodeunicode/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/

相关文章:

javascript - 如何将 JSON 对象从 ajax 传递到 ASP.net 页面

unicode - 使用PIL绘制多语言文本

excel - 如果您在 Windows 资源管理器中右键单击并使用 Excel 打开,如何在 Excel 中打开 txt 文件?

windows - 为什么我不能在 golang 中写一个这样的 windows 文件路径?

docker - 找不到主模块;见 'go help modules'

ios - 允许 JSONDecoder() 接受空数组作为空字典

android - 为什么不同版本的 Android 会以不同的方式重新排序我的 JSON?

javascript - Node - 多个 json 文件到 API

C++:使用平台独立打印 ASCII 心形和钻石

go - 如何避免反射包评估数据类型?