这种问题有两个解决办法,使用后不管你是什么特殊字符还是什么西欧字体还是什么稀奇古怪的内容都可以完美解决!
 
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. Scala入门:从HelloWorld开始【源码及编译】

    最近在学习Scala语言,虽然还没有完全学通, 但是隐约可以体会到Scala的简洁和强大. 它既能让程序员使用函数式编程, 也提供了全面的面向对象编程. 在刚刚开始读<Scala编程>的时 ...

  2. PHP自动加载下——PSR4

    1.先来介绍一下PSR规范 PHP-FIG,它的网站是:www.php-fig.org.就是这个联盟组织发明和创造了PSR规范,其中自动加载涉及其中两个规范,一个是PSR0,一个是PSR4, PSR0 ...

  3. Java常量定义需要注意的两点

    在任何开发语言中,都需要定义常量.在Java开发语言平台中也不例外.不过在Java常量定义的时候,跟其他语言有所不同.其有自己的特色.在这篇文章中,主要针对Java语言中定义常量的注意事项进行解析,帮 ...

  4. 解决因为google cdn无法访问导致无法打开stackoverflow等网站的方法

    许多网站使用了Google的CDN来加速Jquery之类的库来加速网站访问,但由于方校长发福利的原因,导致这些网站很容易出现无法加载"ajax.googleapis.com"而出现 ...

  5. POJ 3237 Tree (树链剖分)

    Tree Time Limit: 5000MS   Memory Limit: 131072K Total Submissions: 2825   Accepted: 769 Description ...

  6. LINUX开启允许对外访问的网络端口命令

    LINUX通过下面的命令可以开启允许对外访问的网络端口: /sbin/iptables -I INPUT -p tcp --dport 8000 -j ACCEPT #开启8000端口 /etc/rc ...

  7. Labeled Faces in the Wild 人脸识别数据集 部分训练数据

    development training set Note: images displayed are original (non-aligned/funneled) images. match pa ...

  8. iTextSharp 合并PDF后,无法删除已经合并的单个文件

    private void MergePDFFiles(string[] fileList, string outMergeFile) { List<PdfReader> readerLis ...

  9. go语言基础之不同目录

    1.不同目录 不同目录,包名不一样 调用不同包里面的函数,格式:包名,函数名() 调用别的包的函数,这个包函数名字如果是小写,无法让别人调用,要想别人能调用,必须首字母大写. 需要配置环境变量 临时配 ...

  10. 基于restful注解(spring4.0.2整合flex+blazeds+spring-mvc)<一>

    摘自: http://www.blogjava.net/liuguly/archive/2014/03/10/410824.html 参考官网:1.http://livedocs.adobe.com/ ...