文档章节

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

yanghui0109
 yanghui0109
发布于 2016/10/28 17:48
字数 776
阅读 108
收藏 0

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

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

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

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

            首先,找出未知字符。页面展示的数据源是数据库,好,先把数据库里的数据查出来,复制到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,看来这两个有点用。

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

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

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

© 著作权归作者所有

yanghui0109
粉丝 1
博文 3
码字总数 1618
作品 0
昆山
私信 提问
编程入门13:Python文本处理

上一篇:编程入门12:Python异常处理 计算机经常需要对文本进行各种操作,我们知道Python语言表示文本的类型是字符串(str),其中可以包含任何字符。系统内部以标准的“统一码”(Unicode)...

starglow_leo
2018/06/19
0
0
史上最简单的 MySQL 教程(四十三)「函数」

温馨提示:本系列博文已经同步到 GitHub,地址为「mysql-tutorial」,欢迎感兴趣的童鞋、,纠错。 函数 函数,就是将一段代码封装到一个结构中,在需要执行该段代码的时候,直接调用该结构(...

qq_35246620
2018/02/28
0
0
如何解决繁琐的WEB前端的XSS问题

在WEB前端开发的过程中,由于大量的URL和多处使用的传递参数,使得很多开发者经常会留下XSS的漏洞。在安全测试中一旦发现漏洞,必须给开发者开defect。Defect的优先级非常高,必须立刻解决。...

xpbug
2012/04/10
1K
3
『实用』过滤字符串中的幽灵字符

背景: 一段明显的字符串,可能潜伏着看不见 的 幽灵字符。 某些字符 比较常见、常用,比如: r n t 但是,有些 幽灵字符(保守估计 >200~1000个),不仅不常见,而且基本没价值。 这些幽灵字...

InkFx
2017/11/17
0
0
JSON 浅谈 — 3.0 解析

解析,是指将符合 JSON 语法规则的字符串转换成对象的过程。 不同的编程语言都提供了解析 JSON 字符串的方法,在这里主要讲解 JavaScript 中的解析方法。主要有三种: 使用 eval() 使用 JSON...

柠檬酷
2015/09/06
31
0

没有更多内容

加载失败,请刷新页面

加载更多

OSChina 周日乱弹 —— 我,小小编辑,食人族酋长

Osc乱弹歌单(2019)请戳(这里) 【今日歌曲】 @宇辰OSC :分享娃娃的单曲《飘洋过海来看你》: #今日歌曲推荐# 《飘洋过海来看你》- 娃娃 手机党少年们想听歌,请使劲儿戳(这里) @宇辰OSC...

小小编辑
今天
420
10
MongoDB系列-- SpringBoot 中对 MongoDB 的 基本操作

SpringBoot 中对 MongoDB 的 基本操作 Database 库的创建 首先 在MongoDB 操作客户端 Robo 3T 中 创建数据库: 增加用户User: 创建 Collections 集合(类似mysql 中的 表): 后面我们大部分都...

TcWong
今天
4
0
spring cloud

一、从面试题入手 1.1、什么事微服务 1.2、微服务之间如何独立通讯的 1.3、springCloud和Dubbo有哪些区别 1.通信机制:DUbbo基于RPC远程过程调用;微服务cloud基于http restFUL API 1.4、spr...

榴莲黑芝麻糊
今天
3
0
Executor线程池原理与源码解读

线程池为线程生命周期的开销和资源不足问题提供了解决方 案。通过对多个任务重用线程,线程创建的开销被分摊到了多个任务上。 线程实现方式 Thread、Runnable、Callable //实现Runnable接口的...

小强的进阶之路
昨天
7
0
maven 环境隔离

解决问题 即 在 resource 文件夹下面 ,新增对应的资源配置文件夹,对应 开发,测试,生产的不同的配置内容 <resources> <resource> <directory>src/main/resources.${deplo......

之渊
昨天
8
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部