【问题标题】:How to parse json string with UTF-8 characters using java?java - 如何使用java解析带有UTF-8字符的json字符串?
【发布时间】:2026-01-19 12:55:02
【问题描述】:

我有一个带有 SUBSTITUTE () utf-8 字符的 json 字符串。当我尝试使用 jackson 将 json 字符串转换为 java 对象时出现解析异常。你能告诉我如何编码和解码 utf-8 字符吗?

ObjectMapper mapper = new ObjectMapper();
mapper.readValue(jsonString, MY_DOMAIN_OBJECT.class);

jsonString:

{"studentId":"753253-2274", "information":[{"key":"1","value":"Get alerts on your phone(SUBSTITUTE character is present here. Unable to paste it)To subscribe"}]}

错误:

Illegal unquoted character ((CTRL-CHAR, code 26)): has to be escaped using backslash to be included in string value

【问题讨论】:

  • 你能发布实际的错误吗?
  • 您是否确认确实是\u001A 引起了麻烦?难道不是你的域类和 JSON 结构之间有些不匹配吗?
  • 更新了错误代码。它不是不匹配的问题。 @Mena
  • 啊,当然。这是一个控制角色。在 JSON 语法中,您必须对其进行转义。错误文本实际上告诉您,虽然从技术上讲不是反斜杠,而是使用完整的 unicode 转义序列。
  • 你试过this吗?看来问题是一样的。

标签: java json jackson jsonparser


【解决方案1】:

你可以试试这个吗?

ObjectMapper mapper = new ObjectMapper();
mapper.configure(JsonParser.Feature.ALLOW_UNQUOTED_CONTROL_CHARS, true);
mapper.readValue(jsonString, MY_DOMAIN_OBJECT.class);

希望对您有所帮助: Javadoc

确定解析器是否允许 JSON 字符串包含不带引号的控制字符(值小于 32 的 ASCII 字符,包括制表符和换行符)的功能。如果 feature 设置为 false,如果遇到这样的字符,则会引发异常。 由于 JSON 规范要求对所有控制字符进行引用,因此这是一项非标准功能,因此默认禁用。

【讨论】:

  • 这会将我的 SUBSTITUTE 符号转换为 java 编码 (\u001A)。但我想转换为 html 编码 (),因为我需要在 HTML 页面上使用这些信息。有什么办法可以做到这一点? @madplay fileformat.info/info/unicode/char/001a/index.htm
最近更新 更多