【问题标题】:Java String.valueOf(jsonArray) turns UTF-8 encoded content from jsonArray into question marksJava String.valueOf(jsonArray) 将 jsonArray 中的 UTF-8 编码内容转换为问号
【发布时间】:2021-07-15 16:47:50
【问题描述】:

我有这个包含 utf-8 编码字符串的 json 数组(JSONArray 类型):

    [{
      "success":true,
      "data":[
         {"moduleTitle":"تست",
          "title":"تست دو"}
       ],
       "status":200
    }]

然后我想得到它的字符串值。

String s = String.valueOf(jsonArray);

但是 utf-8 字符串会变成这样的问号:

"[{ “成功”:真, “数据”:[ {"moduleTitle":"???", “标题”:”??? ??”} ], “状态”:200 }]"

如何让它正确显示字符串?

【问题讨论】:

  • 打印到(例如 eclipse)控制台时会出现这种情况吗?可能是控制台或字体不支持 unicode 字母并将其转换为 ?
  • 您可以通过将输出写入文件来检查以确保它不仅仅是控制台。
  • 我刚刚编辑了我的问题。我正在用邮递员和 Intellij 的调试工具检查我的结果。只有在我将我的 json 数组转换为字符串之后才会发生这种情况。我很想知道还有什么原因。 @dan1st

标签: java json string utf-8


【解决方案1】:

您正在使用 JVM 的默认字符集转换数据,UTF-8 字符集很可能不在您的服务器或本地。

试试这个:

String s = String.valueOf(jsonArray);
String string2 = new String(s.getBytes(),"UTF-8");
return new ResponseEntity<String>(string2, HttpStatus.OK);

【讨论】:

  • “您正在使用 JVM 的默认字符集转换数据” - 您在提供的代码中哪里看到?您建议使用的result 是什么?请注意,UTF-8 保证存在于每个 JVM 中。
  • 我看不到我可以在代码中的哪个位置添加该行。我刚刚编辑了我的问题。您能否看一下,然后可能会更具体地回答您的答案?非常感谢
  • 得到了完全相同的结果 :( 还有其他想法吗?@DoctorWho
  • 您从哪里得到此回复,是否有任何 3rd 方服务?以及您打算将此回复发送到哪里?
  • 实际上我提到它是一个 API 的部分并不重要,因为 String s 值是困扰我的地方。我在我的 IDE 调试器中检查它。 JSONArray 已正确播种,但字符串未正确播种。但万一它有任何帮助,它不是第三方服务,我想将它发送给第三方应用程序以供使用,但我自己在 IDE(Intelij)调试器和邮递员中检查它。 @DoctorWho
猜你喜欢
  • 2015-10-22
  • 2013-11-15
  • 1970-01-01
  • 2021-06-28
  • 1970-01-01
  • 2013-06-06
  • 2016-06-05
  • 2015-07-30
  • 2016-10-29
相关资源
最近更新 更多