gpt4 book ai didi

java - 如何使 JSONObject 的 toString() 将 UTF-8 字符编码为 un​​icode,就像 PHP 的 json_encode 中一样?

转载 作者:行者123 更新时间:2023-12-01 13:00:19 29 4
gpt4 key购买 nike

在 Java(用于 Android)中,以下是代码行:

org.json.JSONObject array = new org.json.JSONObject("{\"value\":\"aész\"");
System.out.println("RES: " + array.toString());

我想要的输出:

RES: {"value":"a\u00e9sz"}

实际情况是:

RES: {"value":"aész"}

如何使 JSONObject toString() 方法返回使用 UTF-8 特殊字符中的 unicode 值编码的 JSON 字符串,例如 json_encode(array("value", "aész"));

提前致谢。

最佳答案

如果您希望它转义所有非 ASCII 字符,您需要构建自己版本的 org.json.JSONObject 类。

您需要修改的方法的签名是

 public static Writer quote(String string, Writer w) throws IOException

它在 JSONObject.java 中声明。该方法负责格式化生成的 json 字符串中的所有字符串值。它循环遍历源字符串的所有字符并发出相应的输出字符。

您要查找的内容位于 switch 语句的“默认”部分。

原始代码(至少在我现在正在观看的源代码中)如下所示:

    default:
if (c < ' ' || (c >= '\u0080' && c < '\u00a0')
|| (c >= '\u2000' && c < '\u2100')) {
w.write("\\u");
hhhh = Integer.toHexString(c);
w.write("0000", 0, 4 - hhhh.length());
w.write(hhhh);
} else {
w.write(c);
}

您需要更改“if”测试以匹配您想要转义的所有字符。

这就是你想要的:

    default:
if (c < ' ' || c >= '\u0080') {
w.write("\\u");
hhhh = Integer.toHexString(c);
w.write("0000", 0, 4 - hhhh.length());
w.write(hhhh);
} else {
w.write(c);
}

希望这有帮助。

P.S:我遇到你的问题是因为我遇到了同样的问题:我生成的 json 字符串需要通过一个仅接受 ascii 字符并破坏任何 >127 字符的系统。

关于java - 如何使 JSONObject 的 toString() 将 UTF-8 字符编码为 un​​icode,就像 PHP 的 json_encode 中一样?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23565486/

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