java json utf-8_关于java:如何使JSONObject的toString()像UTF-8字符一样将UTF-8字符编码为unicode?...

在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特殊字符(如json_encode(array("value","aész"));)的unicode值编码的JSON字符串

提前致谢。

您能否谈谈为什么要以这种方式对输出进行编码? 两者都是符合RFC 7159的有效JSON,含义相同,并且应以相同的方式解码。

这是因为我使用的第三方API Im不支持非英语字符,因此如果将其编码,则可以在以后获取字符。

听起来更像jar问题。 JsonObject是跨各种开源库使用的类。下载此jar json-rpc-1.0.jar

尝试这个:

JSONObject json = new JSONObject();

json.put("value","aész");

System.out.println(json.toString());

产生:

{"Name":"u00e9sz"}

但是请看,我希望结果不会出现在特殊字符中。 我不希望结果是:asz,我实际上希望它是:" a u00e9sz"

编辑答案,尝试那个罐子。 @格雷戈

结果应该是{"Name":"a\u00e9sz"}吗?

如果希望它转义所有非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的字符的系统传输。

我想您想要的是ISO-8859-1编码。这是一个很好的答案:

在Java中将UTF-8转换为ISO-8859-1-如何使其保持为单字节

嗯,也许我不明白如何在JSON字符串中实现,我举了一个很小的例子,您能否尝试用我给出的例子来展示?

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值