为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

Go
明月笑刀无情 2021-07-01 10:00:31
我在字符串列表的 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


查看完整回答
反对 回复 2021-07-12
  • 2 回答
  • 0 关注
  • 367 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信