Home >Backend Development >Golang >Unmarshalling fails with 'Invalid character '\x00' in string literal'
php小编苹果解析报告:当你在处理字符串文字时,如果遇到无效字符'\x00',解组操作会失败。这个问题可能出现在多种情况下,例如从数据库中读取数据时或者接收用户输入时。解决这个问题的方法有很多,可以使用trim()函数去除字符串中的无效字符,也可以使用正则表达式匹配并替换掉无效字符。确保对用户输入进行过滤和验证,以避免无效字符的出现。
go 版本
)?$ go version go1.19.1
是
go env
)?linux
package main import ( "encoding/json" "fmt" "strconv" "strings" ) func unescapeunicode(ucontent string) (string, error) { content := strings.replace(strconv.quote(ucontent), `\\u`, `\u`, -1) text, err := strconv.unquote(content) if err != nil { return "", err } return text, nil } func main() { v := "{\"aa\":\"some\\u0000\"}" v2, _ := unescapeunicode(v) var m = make(map[string]interface{}) err := json.unmarshal([]byte(v2), &m) if err != nil { fmt.println(err) return } fmt.println(m) }
map[aa:some]
invalid character '\x00' in string literal
您可以通过删除 unescapeunicode
函数来更改 main 方法,如下所示。
func main() { v := "{\"aa\":\"some\\u0000\"}" var m = make(map[string]interface{}) err := json.Unmarshal([]byte(v), &m) if err != nil { fmt.Println(err) return } fmt.Println(m) }
注意:
\u0000
是一个 unicode。为了将 \u0000
包含在字符串中,应将 \u0000
替换为 \\u0000
。
双引号 ("
) 是保留字符,不能在 json 中使用,必须正确转义才能在字符串中使用。为此,应将双引号替换为 \"
。
您无需手动处理特殊字符转义。它将由 json.unmarshal
处理。
The above is the detailed content of Unmarshalling fails with 'Invalid character '\x00' in string literal'. For more information, please follow other related articles on the PHP Chinese website!