本文转自:http://eit.name/blog/read.php?462
近日某同事在用java发布一个API时,使用Json进行数据编码,发现JSON官方的java扩展在处理汉字时未进行ascii转义,如下所示:
Java源码:
AppObject ao=new AppObject(20,"鱼漂");
try {
JSONObject jo=new JSONObject(ao);
System.out.println(jo.toString());
} catch (Exception e) {
System.out.println("json encode error.");
}
输出为:
{"name":"鱼漂","age":10}
其中的name仍然显示中文,未进行ascii转义,通常情况下是可以正常使用的,但在不同的系统互相调用时,可能需要编码转换,比如从GBK转到UTF8。
通过查看源代码发现,在JSONObject.java的1138-1139行,只将\u0080-\u00a0, \u2000-\u2100的字符转成\u的格式。汉字的unicode编码不在这两个范围之内,所以不会转换。
找到原因后,修改就比较简单,我们只需简单的将\u0080以上的所有字符,转成\u格式即可,将1138-1139行改为:
if (c < ' ' || c >= '\u0080') {
再次测试,输出结果为:
{"name":"\u9c7c\u6f02","age":10}
分享到:
相关推荐
为了解决这个问题,我们可以对 LitJson 进行扩展,使其支持不转义汉字的 JSON 序列化。 首先,让我们理解一下 JSON 对中文字符的转义。在 JSON 格式中,非 ASCII 字符(如汉字)通常会被转换为 Unicode 转义序列,...
然而,在处理包含中文字符的JSON数据时,有时会遇到一些特定的问题,比如“微信API不支持中文转义的json结构”。 中文字符在JSON中的正确表示方式是使用Unicode编码。JSON标准规定,非ASCII字符必须转义为Unicode...
在编程过程中,尤其是在涉及到中文字符时,经常遇到的困扰之一是JSON编码和解码时的中文乱码问题。本文将详细解析这个问题,并提供解决方案。 首先,我们要了解JSON(JavaScript Object Notation)是一种轻量级的...
java 转义和反转义工具类 java 转义和反转义工具类java 转义和反转义工具类 java 转义和反转义工具类java 转义和反转义工具类 java 转义和反转义工具类java 转义和反转义工具类 java 转义和反转义工具类java 转义和...
然而,当我们处理包含中文汉字的数据时,`json_encode`默认会转义这些非ASCII字符,导致输出的JSON字符串中中文汉字显示为乱码或者\u编码形式。本资料主要探讨如何在使用`json_encode`时避免中文汉字被转义,从而...
从服务端收到的json中有中文 然后JsonData jd = JsonMapper.ToObject(strJson); json中如有中文 会出现\uXXXX\uXXXX等 我改了下 上传了能解决此问题的litjson版本
如果不进行反转义操作,直接使用 `JSON.parse()` 方法将会导致语法错误,因为 JSON 解析器期望的是未转义的原始 JSON 数据。因此,在这种情况下,我们需要先对字符串进行反转义操作,去除其中的转义字符,使其恢复为...
在Java开发中,数据交换和存储常常涉及到JSON(JavaScript Object Notation)格式,因为它轻量级、易读写且被广泛支持。`net.sf.json.JSONObject`是开源库Apache Commons的一个组件,提供了Java对象与JSON对象之间的...
转义字符 ASCII码 转义字符 ASCII码 转义字符 ASCII码 转义字符 ASCII码 转义字符 ASCII码
需要注意的是,JSON字符串中的双引号在Java字符串中需要转义,所以`"Bi\"ao"`实际上代表`"Biao"`。 FastJSON还支持更复杂的转换,例如处理数组、集合、Map等数据结构,以及自定义序列化和反序列化的逻辑。对于...
总的来说,当处理JSON字符串时,确保字符串中的特殊字符(如双引号)已经正确转义,使用`JSON.parse()`进行转换,如果遇到兼容性问题,可以使用`eval()`作为备选方案。同时,对于全局替换需求,记得使用正则表达式和...
### 常见转义字符在Java中的应用与解析 #### 概述 在编程语言中,转义字符是一类特殊的字符序列,用于表示那些在文本中无法直接表示或者具有特殊含义的字符。Java作为一种广泛使用的面向对象编程语言,支持多种...
在Java后台开发中,JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,它以其简洁、易读、易于解析的特性被广泛应用于服务器与客户端之间的数据通信。JSON的使用通常需要依赖一些库来帮助我们进行序列...
在编程世界中,特别是使用C语言进行开发时,理解ASCII码表和转义字符是非常基础且重要的知识。STM32,作为一款广泛应用的微控制器,其编程也涉及到这些概念。让我们详细探讨一下。 ASCII(American Standard Code ...
本文将针对"网页获取JSON中文返回乱码解决方案"进行深入探讨,包括Java后端与JavaScript前端的处理策略。 首先,我们要理解JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,它基于JavaScript的一个...
除了上述转义字符外,Java还支持一些其他特殊的转义字符,这些字符主要用于解决特殊符号的问题。 **示例:** - 点的转义:`.` 转义为`\u002E` - 美元符号的转义:`$` 转义为`\u0024` - 乘方符号的转义:`^` 转义为...
### Java 数据格式转换成 JSON 的全面解析 #### 一、JSON 概述 JSON (JavaScript Object Notation) 是一种轻量级的数据交换格式,最初由 Douglas Crockford 提出。它基于 JavaScript 的语法,但独立于任何编程语言...
总之,Java Properties文件中文转化是一个常见的编程问题,涉及到字符编码、Unicode转义等概念。通过理解这些基础知识并利用适当的工具或库,我们可以确保Java程序正确地处理和显示中文内容,从而提升软件的国际化...
在Java代码中,我们通过调用ANTLR生成的解析器类,传入JSON字符串进行解析。解析过程会构建AST,然后遍历这棵树,将其转化为Java业务对象。例如,遇到一个JSONObject,我们可以创建一个HashMap来表示对象,遇到一个...
Java 关键字的特点是全部小写,高级编辑软件会对关键字进行特殊颜色标记。黑色为保留字(现阶段没有在 Java 程序当中使用,但是先预约保留下来,以备日后使用),保留字跟关键字具有同样的等级,不可被用来作为...