乱码——JSON字符串有含有看不见的未知字符

当JSON字符串中含有未知字符时,会导致页面显示不出来。这在开发时很常见啊。

今天俺就遇到了。线上BUG,显示不出来,问题就在于,这个字符串有可能是从其它地方copy过来的。

首先,把线上本应显示出来的数据还原到本地后,一条条地排查,一百二十几条,里头有二十几条数据都是这个原因啊。咯,就是下面NotePad里显示的这个东西啊。就是这个玩意儿,导致页面数据显示不出来的。

181020_OZwH_2518325.png

现在把今天找出这个罪魁祸首的方法记下来,希望大家遇到这样的问题也可以尝试一下,看能不能解决。

            首先,找出未知字符。页面展示的数据源是数据库,好,先把数据库里的数据查出来,复制到eclipse里(不得不说,eclipse太强大了,当数据量过大,不能全部复制到编辑器里时候,先尝试着复制到eclipse里,再弄到编辑器里吧(*^__^*) )。当复制到NotePad里的时候,上面这种的就显示出来了,不过在数据库里是显示不出来的,这就是看不见的未知字符啦。另外,我也尝试了一下,EditPlus并不能把这些看不见的字符显示出来,成上面的样子哦。

           然而,待俺把数据这个数据全部替成空,提交完写好SQL脚本后,我就想,这个看不见的字符底是个啥玩意儿呢?因为前端用的Extjs,所以,当然是去翻翻看,关于String字符串的处理方法咯。偶试过

1.Ext.String.htmlEncode(value);  编码字符串,对其中特殊字符进行转义

Ext.String.htmlEncode("hello'world");    //"hello'world"

2.Ext.String.htmlDecode(value);  解码字符串,对其中的转义字符进行还原

Ext.String.htmlDecode("hello'world");    //"hello'world"

然而并不起什么用。

              试过用正则去匹配上面看不见的字符,还试着加转义字符。还是没有用啊。。。。。

             于是,我跟领导提议,禁用粘贴功能吧。我代码都写好啦~~~

    var context_dom = Ext.select('textarea[name=msgOnlineVo.msgOnlineDto.remarks]');//获取dom对象            
    context_dom.on('paste',function(e){//禁止粘贴                                                                                                           
          console.log('no paste');                                                                                                                                           
          e.stopEvent();                                                                                                                                                           
    });                                                                                                                                                                                      
   context_dom.on('copy',function(e){   //禁止复制                                                                                                          
        console.log('no copy');                                                                                                                                               
        e.stopEvent();                                                                                                                                                             
     });                                                                                                                                                                                     
   context_dom.on('contextmenu',function(e){    //禁止右键                                                                                                                                                                                                                                                                                          
        console.log('no contextmenu');                                                                                                                                 
        e.stopEvent();                                                                                                                                                             
      })                                                                                                                                                                                     

             领导拒绝了,文本框不能粘贴,用户会骂人的/(ㄒoㄒ)/~~。不行不行。可是我又不想,每次去排查啊。那么,懒人有懒招了。我一定要把这个害人的字符揪出来。里面的方法我都试了一遍啊,试到了这两个方法,Unicode code,看来这两个有点用。

181122_YSDg_2518325.png

好,把上面那串字符串里,那个特殊字符所在的位揪出来,看看在unicode code是多少。哼~~~

181414_NGDJ_2518325.png

特殊字符替换为空白后,再复制到NotePad里看看,我的乖乖,没问题了。特殊字符处理掉了。181510_cbrC_2518325.png

至此,大功告成,再也不用担心被用户骂了~~~~~~~~

转载于:https://my.oschina.net/u/2518325/blog/777537

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值