Java 字符串到JSONObject并返回到字符串,而不丢失UTF-8编码

Java 字符串到JSONObject并返回到字符串,而不丢失UTF-8编码,java,utf-8,Java,Utf 8,我在String { "html_attributions" : [], "result" : { "opening_hours" : { "open_now" : true, "weekday_text" : [ "Monday: 8:00 AM – 7:00 PM", "Tuesday: 8:00 AM – 7:00 PM", "Wednesday: 8:00

我在
String

{
   "html_attributions" : [],
   "result" : {
      "opening_hours" : {
         "open_now" : true,
         "weekday_text" : [
            "Monday: 8:00 AM – 7:00 PM",
            "Tuesday: 8:00 AM – 7:00 PM",
            "Wednesday: 8:00 AM – 2:30 PM",
            "Thursday: 8:00 AM – 7:00 PM",
            "Friday: 8:00 AM – 7:30 PM",
            "Saturday: 8:00 AM – 6:00 PM",
            "Sunday: Closed"
         ]
      }
   },
   "status" : "OK"
}
我使用

JSONObject resultJSON = new JSONObject(result);
我想获取内部
weekday\u text
键的值,但似乎最终输出不是在
UTF-8
(而是出现
\u2013
unicode字符):


我错过了什么

您之所以看到unicode转义序列,是因为
toString
是如何实现的。它是以这种方式实现的,可能是为了弄清楚字符串中的字符,这使得调试代码更容易,因为有时不同的代码点看起来非常相似

实际的字符串仍然没有被替换。在数组中打印单个字符串不会显示转义序列:

System.out.println(resultJSON.getJSONObject("result").getJSONObject("opening_hours").getJSONArray("weekday_text").getString(0));

您可以使用OutputStreamWriter来管理输出编码

JSONObject resultJSON = new JSONObject(result);    
ByteArrayOutputStream out = new ByteArrayOutputStream();
OutputStreamWriter writer = new OutputStreamWriter(out, "utf-8");
resultJSON.write(writer);
writer.flush();

String jSONStringUTF8 = new String(out.toByteArray(),"utf-8");
JSONObject newJSON = new JSONObject(jSONStringUTF8);
String value = newJSON.getString("content");

最终输出不在UTF8中可能是因为
toString
是如何实现的。尝试打印数组中的一项。您是对的<代码>结果JSON.getJSONObject(“结果”).getJSONObject(“开放时间”).getJSONArray(“工作日文本”).getString(0)给出一个
UTF-8
编码结果。干杯
JSONObject resultJSON = new JSONObject(result);    
ByteArrayOutputStream out = new ByteArrayOutputStream();
OutputStreamWriter writer = new OutputStreamWriter(out, "utf-8");
resultJSON.write(writer);
writer.flush();

String jSONStringUTF8 = new String(out.toByteArray(),"utf-8");
JSONObject newJSON = new JSONObject(jSONStringUTF8);
String value = newJSON.getString("content");