修改JSONObject源码使JSON官方的java扩展支持对汉字进行ascii转义
2011-02-12 11:11
645 查看
本文转自: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}
近日某同事在用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}
相关文章推荐
- java转化json方式2,(需要json官方jar包支持)
- JSON相关的,数据彼此间的转化进行了简单地封装,源码如下,支持arc与非arc
- Java 用Jackson进行json和object之间的转换(并解决json中存在新增多余字段的问题)
- org.json源码分析及增强(一)——JSONObject对象与Java对象相互转换
- 对Java的URL类支持的协议进行扩展的方法
- xStream完美转换XML、JSON xStream框架 xStream可以轻易的将Java对象和xml文档相互转换,而且可以修改某个特定的属性和节点名称,而且也支持json的转换; 前面有介
- Java从JDK源码角度对Object进行实例分析
- java转化json方式2(需要json官方jar包支持)
- 如何用Google APIs和Google的应用系统进行集成(7)----在把JSON转换成XML数据过程中,JSON数据中包含违背XML数据规范:XML节点名不支持数字的Java解决方案
- JAVA中对List<Map<String,Object>>中的中文汉字进行排序
- Java 用Jackson进行json和object之间的转换(并解决json中存在新增多余字段的问题)
- JAVA中对List<Map<String,Object>>中的中文汉字进行排序
- jquery.form.js修改源码ajax支持json格式参数
- json对象、json格式字符串、java对象【使用此net.sf.json.JSONObject将java对象[比如数组集合Map、Map扩展]转换成json格式字符串】
- Java读取json文件并对json数据进行读取、添加、删除与修改操作
- Java读取json文件并对json数据进行读取、添加、删除与修改操作
- Thrift源码修改,改造RPC,支持多Processor[java版]
- java汉字转拼音,取汉字首字母,支持繁体
- 使用json-lib将Java对象转SONObject,Java集合转JSONArray
- 使用json-lib进行Java和JSON之间的转换