'문자열 리터럴의 잘못된 문자 '\x00''으로 인해 언마샬링이 실패합니다.

WBOY
풀어 주다: 2024-02-13 14:15:08
앞으로
524명이 탐색했습니다.

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

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

问题内容

您使用的 go 版本是什么(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 处理。

위 내용은 '문자열 리터럴의 잘못된 문자 '\x00''으로 인해 언마샬링이 실패합니다.의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

원천:stackoverflow.com
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿
회사 소개 부인 성명 Sitemap
PHP 중국어 웹사이트:공공복지 온라인 PHP 교육,PHP 학습자의 빠른 성장을 도와주세요!