Das Unmarshalling schlägt mit „Ungültiges Zeichen „\x00' im Zeichenfolgenliteral' fehl.

WBOY
Freigeben: 2024-02-13 14:15:08
nach vorne
538 Leute haben es durchsucht

"解组失败,并报告“字符串文字中的无效字符

php小编苹果解析报告:当你在处理字符串文字时,如果遇到无效字符'\x00',解组操作会失败。这个问题可能出现在多种情况下,例如从数据库中读取数据时或者接收用户输入时。解决这个问题的方法有很多,可以使用trim()函数去除字符串中的无效字符,也可以使用正则表达式匹配并替换掉无效字符。确保对用户输入进行过滤和验证,以避免无效字符的出现。

问题内容

您使用的 go 版本是什么(go 版本)?

$ go version
go1.19.1
Nach dem Login kopieren

最新版本是否会重现此问题?

您使用什么操作系统和处理器架构(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)
}
Nach dem Login kopieren

您期望看到什么?

map[aa:some]
Nach dem Login kopieren

你看到了什么?

invalid character '\x00' in string literal
Nach dem Login kopieren

解决方法

您可以通过删除 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)
}
Nach dem Login kopieren

注意:

  • \u0000 是一个 unicode。为了将 \u0000 包含在字符串中,应将 \u0000 替换为 \\u0000

  • 双引号 (") 是保留字符,不能在 json 中使用,必须正确转义才能在字符串中使用。为此,应将双引号替换为 \"

  • 您无需手动处理特殊字符转义。它将由 json.unmarshal 处理。

Das obige ist der detaillierte Inhalt vonDas Unmarshalling schlägt mit „Ungültiges Zeichen „\x00' im Zeichenfolgenliteral' fehl.. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:stackoverflow.com
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage