gpt4 book ai didi

java - JsonParseException : Invalid UTF-8 middle byte 0x2d

转载 作者:行者123 更新时间:2023-12-01 10:29:08 26 4
gpt4 key购买 nike

我有一个 JSON 字符串,我从中创建一个 InputStream 对象,如下所示,然后在尝试序列化我的 JSON 对象时创建一个 GenericRecord 对象Avro 架构。

InputStream input = new ByteArrayInputStream(jsonString.getBytes());
DataInputStream din = new DataInputStream(input);

Decoder decoder = DecoderFactory.get().jsonDecoder(schema, din);

DatumReader<GenericRecord> reader = new GenericDatumReader<GenericRecord>(schema);
// below line is throwing exception
GenericRecord datum = reader.read(null, decoder);

以下是我遇到的异常:

org.codehaus.jackson.JsonParseException: Invalid UTF-8 middle byte 0x2d at [Source: java.io.DataInputStream@562aee31; line: 1, column: 74]

这是发生此异常的实际 JSON 字符串:

{"name":"car_test","attr_value":"2006|Renault|Megane II Coupé-Cabriolet|null|null|null|null|0|Wed Feb 03 10:00:59 GMT-07:00 2016|1|77|null|null|null|null","data_id":900}

我做了一些研究,发现我需要将 ByteArrayInputStream 与 UTF-8 编码一起使用,如下所示:

InputStream input = new ByteArrayInputStream(jsonString.getBytes(StandardCharsets.UTF_8.displayName()));

但是我的问题是这个异常的原因是什么?为什么它会发生在我上面的 JSON 字符串上?我只是想理解为什么这个异常发生在我上面的 JSON 字符串上。使用 UTF-8 是解决此问题的正确方法吗?

此错误意味着什么无效的 UTF-8 中间字节 0x2d

最佳答案

您从 Java Unicode 字符串 jsonString 开始。

然后使用String.getBytes() 将其转换为字节流。由于您没有指定字节编码,因此使用平台默认编码,很可能是 ISO 8859-1。

现在您可以从 (Data)InputStream 解析 JSON。现在Avro似乎使用UTF-8来解码字节。当它遇到 é (0x2d) 时,它会失败,因为它不是有效的 UTF 字节序列。

所以最终是实际编码(ISO 8859-1)和预期编码(UTF-8)不匹配。

您可以像以前一样解决这个问题,或者只是避免从字符串到字节:

Decoder decoder = DecoderFactory.get().jsonDecoder(schema, jsonString);

关于java - JsonParseException : Invalid UTF-8 middle byte 0x2d,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35185369/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com