这种问题有两个解决办法,使用后不管你是什么特殊字符还是什么西欧字体还是什么稀奇古怪的内容都可以完美解决!
 
1.要把即将转换为json的内容先转换为unicode编码,json转换无误后,使用json时,比如展示json里的内容,再将其转换为中文字符
2.这是个偏方法,使用过JSONObject lib 工具的都知道即使是一条乱码内容,依然可以存储到JSONObject里去。我看了它的存储源码,发现它是存储之前,将内容解释后再存储了。这样做得话,不管你什么,我先解释一遍再存储,可以避免存储时因特殊内容出现的问题。既然这样,偷过来它这个工具的特性,我利用它这个功能解释后再转json,自然就没问题了
 
 
总之就是将一切让json转换失败的特殊内容都转义或合法解释掉掉,避免出错
 
 
 
JSONObject 主要是net.sf.json.JSONObject这个类,jar包是json-lib-2.3-jdk15.jar
 
一定要用JSONObject存储后再使用解释方法,这两句代码不是放在这玩的
JSONObject json = new JSONObject();
json.put( "content", content);
 
JSONUtils类里的这个方法
JSONUtils.valueToString(json.get("content"));
 
 
 
第二个版本:
 
这句代码是将内容转成json,任何会引起json转换失败的符号都会被转义,但只是在action里或者是java后台里使用是没有问题的
content = com.zdzddzzd.util.string.StringUtils.string2Json(content);
 
但如果action结果页面里要用,并且要用json来解析的话这就用有问题了,这个方法使用过后,页面直接使用json转换js函数依然还是转换不了,去掉这个方法,使用sh-gs-tskj配置的一个jsp转换json工具,一句代码过后就搞定了,但他们也不能结合一起使用,因为在某些数据上,两次转义后的内容依然还是不可以转换json的,如果是页面展示建议使用jsp转换json工具
 
type="json",这个配置是要在struts文件中配置后才能使用的,transing自搞的一个东西,文件名叫这个struts-tags.tld,具体怎么玩到时拿sh-gs-tskj的代码再看下咯
< s:property type ="json" value ="#dw.content"/>
 
 
 

代码:
 
                                                       String content = StringUtils.defaultIfEmpty(dzhWeiboBO.getContent(), "");
                              content = WebUtil. clearHtmlTag(content, "utf-8");
                               /* 20130113 sv 转json */
                               try {
                                    content = com.linktong.util.string.StringUtils.string2Json(content);
                                    
                                    JSONObject json = new JSONObject();
                                    json.put( "content", content);
//                                  System.out.println( json);
                                    
                                     // 使用JSONWriter将content输出一个可用的JSON String
                                    String valueToString = JSONUtils.valueToString(json.get("content"));
//                                  System.out.println(valueToString);
                                    
                                     // 去除JSONUtils.valueToString返回的前后"符号
                                    valueToString = valueToString.substring(1);
                                    valueToString = valueToString.substring(0, valueToString.length() - 1);
                                    
                                    content = valueToString.replace("\"" , "" );
//                                  System.out.println(content);
                              } catch (Exception e) {
                                     // TODO Auto-generated catch block
                                    e.printStackTrace();
                              }
 
 
代码v2:
 
#action code
                              String content = StringUtils.defaultIfEmpty(dzhWeiboBO.getContent(), "");
//                            content = WebUtil.clearHtmlTag(content, "utf-8");
                               /* 转json    by sv 20130113 */
                               try {
//                                  content = com.linktong.util.string.StringUtils.string2Json(content);
                                    
                                    JSONObject json = new JSONObject();
                                    json.put( "content", content);
//                                  System.out.println( json);
                                    
                                     // 使用JSONWriter将content输出一个可用的JSON String
                                    String valueToString = JSONUtils.valueToString(json.get("content"));
//                                  System.out.println(valueToString);
                                    
                                     // 去除JSONUtils.valueToString返回的前后"符号
                                    valueToString = valueToString.substring(1);
                                    valueToString = valueToString.substring(0, valueToString.length() - 1);
                                    
                                    content = valueToString.replace("\"" , "" );
//                                  System.out.println(content);
                              } catch (Exception e) {
                                     // TODO Auto-generated catch block
                                    e.printStackTrace();
                              }
 
#jsp code
                         <td style='text-align : left' title='< s:property type="json" value="#dw.content"/> '>
                         <s:if test='#dw.content!=null&&#dw.content.getBytes().length>90' >
                               <s:property type="json" value="#dw.content.substring(0,45)" />...
                               </s:if>
                               <s:else>
                                     <s:property type="json" value="#dw.content" />
                               </s:else>
                         </td>
 
 
 

 
 
 
 
 
 

乱码字符引起的JSON转换失败的更多相关文章

  1. ELK系列~Nxlog日志收集加转发(解决log4日志换行导致json转换失败问题)

    本文章将会继承上一篇文章,主要讲通过工具来进行日志的收集与发送,<ELK系列~NLog.Targets.Fluentd到达如何通过tcp发到fluentd> Nxlog是一个日志收集工具, ...

  2. jQuery.ajax() datatype:“json" 转换失败

    当使用jQuery.ajax() 时,如果设置dataType:"json",如果返回的字符转换出错则不会调用success方法,而进入error方法,控制台中也不会出现错误信息 ...

  3. json转换对象中出现null属性的解决方法

    前言:当数据进行json转换时,当属性值为null时,json解析就会中断,导致接下来的数据无法正确获取.原则上来讲服务器端发送的json字符串不允许存在属性值为空的情况,但是如果服务器端发送了nul ...

  4. 1.JSON 转换对象失败问题 2.spring注入失效

    今天做项目中将一个json 字符串转换为对象,但结果怎么都转换不了!——————最后发现问题,原来是因为这个类我给他添加了带参数的构造器!导致转换失败! 在添加一个无参的构造器就好了! 第二个:今天调 ...

  5. Springboot中redisTemplate乱码或json转换问题

    问题1 用RedisTemplate存入map值的时候,用rdm可视化打开,看到的是转码之后的数据,如图: 存入的方法为: public boolean hmset(String key, Map&l ...

  6. json数据转换失败json_last_error int(4)

    最近在程序中使用json_decode($data,true);转换失败, 并且使用 json_last_error();方法返回最后一次转换的错误,json_last_error();返回int(4 ...

  7. Jackson框架,json转换

    Jackson可以轻松的将Java对象转换成json对象和xml文档,同样也可以将json.xml转换成Java对象. 前面有介绍过json-lib这个框架,在线博文:http://www.cnblo ...

  8. json转换(c#后台生成json的方法)

    此文转自:http://bbs.csdn.net/topics/380200497,为了方便自己记忆才以文章形式保存. using System; using System.Collections.G ...

  9. Python常见字符编码间的转换

    主要内容:     1.Unicode 和 UTF-8的爱恨纠葛     2.字符在硬盘上的存储     3.编码的转换     4.验证编码是否转换正确     5.Python bytes类型 前 ...

随机推荐

  1. extjs用iframe的问题

    项目中用extjs做前提系统的界面是左边用树做目录 右边用tabpanel做内容展示点击树节点的时候 在tabpanel添加新的tab JScript code var newTab = center ...

  2. WPF支持GIF的各种方法

    2012.12.18更新:修复下载链接 已知WPF的Image元素只能显示GIF图片的第一帧,而MediaElement不能加载作为资源或内嵌的资源的GIF图片,所以网上有几种实现方法. 我抄袭网上提 ...

  3. java并发集合知识点(二)

    我们平时写程序需要经常用到集合类,比如ArrayList.HashMap等,但是这些集合不能够实现并发运行机制,这样在服务器上运行时就会非常的消耗资源和浪费时间,并且对这些集合进行迭代的过程中不能进行 ...

  4. 固定的价格就意味着背叛——《practices of an agile developper》

    “对这个项目,我们必须要有固定的报价.虽然我们还不清楚项目的具体情况,但仍要有一个报价.到星期一,我需要整个团队的评估,并且我们必须要在年末交付整个项目.” Venkat & Andy 提出了 ...

  5. matlab strel

    >>se3 = strel('square',3)Neighborhood: 1 1 1 1 1 1 1 1 1 >> se3 = strel('line',3 , 45)Ne ...

  6. 未能加载文件或程序集“Antlr3.Runtime”或它的一个依赖项的解决办法

    一.问题症状 未能加载文件或程序集“Antlr3.Runtime”或它的一个依赖项.参数错误.   二.问题起因和经过 今天我在虚拟机下做开发,asp.net mvc4开发测试微信接口,一不小心虚拟机 ...

  7. OpenCV中图像融合

         准备2副背景图像,注意图像黑色的部分,是作为mask用的,我们会用灰度图的方式打开它们,这时黑色的部分值为0,则图像融合时候,可以把第二幅图像在黑色的部分显示出来. 代码非常简单,注意就是图 ...

  8. 如何在Windows Server 2012 R2上安装SharePoint 2013

    笔者原以为是个挺容易个事儿, 毕竟是微软自家的产品安装在自家的操作系统上, 没想到还是让我费了半天劲.   写在这里吧, 方便其他的朋友.   具体步骤 ======================= ...

  9. 下拉菜单select高度(兼容IE6/IE7/IE8/火狐等主流浏览器)

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...

  10. [简谈]绕过HR破门而入的求职智慧

    以往我们在网上看到的非常多求职文章或指导性纲领,譬如啥自信.做功课.良好形象.华丽的简历.工作经验.口才啥的,事实上到了21世纪尤其是互联网快速发展的今天,前面这些技巧就显得无比空洞: 1.由于自信谁 ...