当前位置: 首页 > 面试题库 >

从json获得错误“无效的字符'ï'寻找值的开头”的错误。

蒲昀
2023-03-14
问题内容

我使用Golang HTTP请求获取json输出,如下所示。我尝试访问的Web服务是Micrsoft Translator
https://msdn.microsoft.com/en-
us/library/dn876735.aspx

//Data struct of TransformTextResponse
type TransformTextResponse struct {
    ErrorCondition   int    `json:"ec"`       // A positive number representing an error condition
    ErrorDescriptive string `json:"em"`       // A descriptive error message
    Sentence         string `json:"sentence"` // transformed text
}


//some code ....
body, err := ioutil.ReadAll(response.Body)
defer response.Body.Close()
if err != nil {
    return "", tracerr.Wrap(err)
}

transTransform = TransformTextResponse{}
err = json.Unmarshal(body, &transTransform)
if err != nil {
   return "", tracerr.Wrap(err)
}

我收到一个错误 invalid character 'ï' looking for beginning of value

因此,我尝试打印bodyas字符串fmt.Println(string(body)),它显示:

{"ec":0,"em":"OK","sentence":"This is too strange i just want to go home soon"}

看来数据没有任何问题,所以我尝试通过创建相同的值 jason.Marshal

transTransform := TransformTextResponse{}
transTransform.ErrorCondition = 0
transTransform.ErrorDescriptive = "OK"
transTransform.Sentence = "This is too strange i just want to go home soon"
jbody, _ := json.Marshal(transTransform)

我发现原始数据可能有问题,因此我尝试比较两种[]byte格式的数据。

来自的数据response.Body

[239 187 191 123 34 101 99 34 58 48 44 34 101 109 34 58 34 79 75 34 44 34 115 101 110 116 101 110 99 101 34 58 34 84 104 105 115 32 105 115 32 116 111 111 32 115 116 114 97 110 103 101 32 105 32 106 117 115 116 32 119 97 110 116 32 116 111 32 103 111 32 104 111 109 101 32 115 111 111 110 34 125]

来自的数据 json.Marshal

[123 34 101 99 34 58 48 44 34 101 109 34 58 34 79 75 34 44 34 115 101 110 116 101 110 99 101 34 58 34 84 104 105 115 32 105 115 32 116 111 111 32 115 116 114 97 110 103 101 32 105 32 106 117 115 116 32 119 97 110 116 32 116 111 32 103 111 32 104 111 109 101 32 115 111 111 110 34 125]

知道我如何解析response.Body并将其解组为数据结构吗?


问题答案:

服务器正在向您发送带有字节顺序标记(BOM)的UTF-8文本字符串。BOM标识文本是UTF-8编码的,但应在解码之前将其删除。

可以使用以下行(使用包“ bytes”)完成此操作:

body = bytes.TrimPrefix(body, []byte("\xef\xbb\xbf")) // Or []byte{239, 187, 191}

PS。引用该错误ï是因为将UTF-8 BOM解释为ISO-8859-1字符串会产生这些字符



 类似资料:
  • 问题内容: 当我走时,我收到以下错误消息: 安装的Docker版本: 使用以下方式安装: 我已确保网络存在并且可以访问其他站点。请帮忙 更新1:问题不能是设置MTU,因为几天后我可以从Docker集线器中将映像拉回到同一台机器上。 由于我在家庭网络中,因此该问题也可能不是HTTP_PROXY 问题答案: 该错误消息几乎没有误导性。问题不在于字符无效,而是网络配置错误。我有一个LAN接口和一个WLA

  • 问题内容: 我刚刚编写了第一个Go应用程序,该应用程序通过http下载并解组了简单的JSON对象。Http内容被压缩: 我用几个众所周知的例子(如此)。不幸的是,应用程序无法解析所需的JSON,并且出现了非常罕见的奇怪错误。我无法找出问题所在。任何帮助将不胜感激。 JSON输入 (使用Python进行调试) 源代码 (根据答案 更新 ) 错误 UPD: 谢谢大家。现在很明显,此问题的原因是HTTP

  • 问题内容: 我正在尝试在其中发布带有xml消息的json。但是它返回 无效的字符“ b”正在寻找价值的起点 我认为可能的原因是我试图封送非json格式的return正文。 错误发生在这一行 问题答案: 该错误表明服务器未返回有效的JSON响应。我建议添加以下代码来调试问题:

  • 问题内容: 尝试运行声纳测试,但失败了: 我的jenkins控制台输出: 如何解决此错误信息? 问题答案: 我看到错误: 您通过以下步骤开始了该过程: 确保翻一番,以使找到实际的文件夹。 那是: 有关更多信息,请参见分析源代码/分析参数。 该OP巴达尔·辛格的报告中评论: 这是由于我在文件中提到的文件夹路径错误

  • 我是iOS新手。我收到此错误: Error Domain=NSCoaErrorDomain Code=3840"字符0周围的值无效。"UserInfo={NSDebugDescription=字符0周围的值无效。}反序列化JSON时出错:Error Domain=NSCoaErrorDomain Code=3840"JSON文本没有以数组或对象开头,也没有设置允许片段的选项。"UserInfo={

  • 我遇到了使用Java存储数据的EXT js代码的问题。下面是我的代码。有谁能帮帮我吗。 下面是我的NewCustomersVerify.js代码: 下面是我在浏览器控制台上遇到的错误。 [E]ext.JSON.decode():您正在尝试解码无效的JSON字符串:Apache Tomcat/8.0.21-Error reportH1{font-family:Tahoma,Arial,sans-se