Jackson JSON 解析器无效的 utf-8 起始字节

新手上路,请多包涵

我正在尝试解析以下 JSON,并且不断收到 JsonParseException

 {
   "episodes":{
      "description":"Episode 3 – Oprah's Surprise Patrol from 1\/20\/04\nTake a trip down memory lane and hear all your favorite episodes of The Oprah Winfrey Show from the last 25 seasons -- everyday on your radio!"
   }
}

在此 JSON 上也失败

{
   "episodes":{
      "description":"After 20 years in sports talk…he’s still the top dog!  Catch Christopher “Mad Dog” Russo weekday afternoons on Mad Dog Radio as he tells it like it is…Give the Doggie a call at 888-623-3646."
   }
}

例外:

 org.codehaus.jackson.JsonParseException: Invalid UTF-8 start byte 0x96
 at [Source: C:\Json Test Files\episodes.txt; line: 3, column: 33]
    at org.codehaus.jackson.JsonParser._constructError(JsonParser.java:1291)
    at org.codehaus.jackson.impl.JsonParserMinimalBase._reportError(JsonParserMinimalBase.java:385)
    at org.codehaus.jackson.impl.Utf8StreamParser._reportInvalidInitial(Utf8StreamParser.java:2236)
    at org.codehaus.jackson.impl.Utf8StreamParser._reportInvalidChar(Utf8StreamParser.java:2230)
    at org.codehaus.jackson.impl.Utf8StreamParser._finishString2(Utf8StreamParser.java:1467)
    at org.codehaus.jackson.impl.Utf8StreamParser._finishString(Utf8StreamParser.java:1394)
    at org.codehaus.jackson.impl.Utf8StreamParser.getText(Utf8StreamParser.java:113)
    at com.niveus.jackson.Main.parseEpisodes(Main.java:37)
    at com.niveus.jackson.Main.main(Main.java:13)

代码:

     public static void main(String [] args) {
        parseEpisodes("C:\\Json Test Files\\episodes.txt");
    }
    public static void parseEpisodes(String filename) {
        JsonFactory factory = new JsonFactory();
        JsonParser parser = null;
        String nameField = null;

        try {
            parser = factory.createJsonParser(new File(filename));

            parser.configure(JsonParser.Feature.ALLOW_UNQUOTED_CONTROL_CHARS, true);
            parser.configure(JsonParser.Feature.ALLOW_BACKSLASH_ESCAPING_ANY_CHARACTER, true);

            JsonToken token = parser.nextToken();
            nameField = parser.getText();
            String desc = null;

            while (token != JsonToken.END_OBJECT) {
                if (nameField.equals("episodes")) {
                    while (token != JsonToken.END_OBJECT) {
                        if (nameField.equals("description")) {
                            parser.nextToken();
                            desc = parser.getText();
                        }

                        token = parser.nextToken();
                        nameField = parser.getText();
                    }
                }

                token = parser.nextToken();
                nameField = parser.getText();
            }

            System.out.println(desc);
        } catch (JsonParseException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

原文由 Android Noob 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 1.5k
2 个回答

第 33 列的字符是 ,这将是字节 0x96 的原因是该文件物理编码为 Windows-1252。您需要以 UTF-8 格式保存文件,windows-1252 不是 json 的有效编码。如何执行此操作取决于您使用的文本编辑器。

请参阅 JSON RFC

  1. 编码

JSON 文本应以 Unicode 编码。默认编码是

UTF-8。

原文由 Esailija 发布,翻译遵循 CC BY-SA 3.0 许可协议

我也遇到过类似的问题。在 Notepad ++ 中打开你的 json,然后在编码下拉列表中选择 UTF-8。并将文本保存到其他文件。这样做解决了这个问题。

原文由 safura 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题