亂碼——JSON字符串有含有看不見的未知字符

當JSON字符串中含有未知字符時,會致使頁面顯示不出來。這在開發時很常見啊。html

今天俺就遇到了。線上BUG,顯示不出來,問題就在於,這個字符串有多是從其它地方copy過來的。前端

首先,把線上本應顯示出來的數據還原到本地後,一條條地排查,一百二十幾條,裏頭有二十幾條數據都是這個緣由啊。咯,就是下面NotePad裏顯示的這個東西啊。就是這個玩意兒,致使頁面數據顯示不出來的。數據庫

如今把今天找出這個罪魁禍首的方法記下來,但願你們遇到這樣的問題也能夠嘗試一下,看能不能解決。dom

            首先,找出未知字符。頁面展現的數據源是數據庫,好,先把數據庫裏的數據查出來,複製到eclipse裏(不得不說,eclipse太強大了,當數據量過大,不能所有複製到編輯器裏時候,先嚐試着複製到eclipse裏,再弄到編輯器裏吧(*^__^*) )。當複製到NotePad裏的時候,上面這種的就顯示出來了,不過在數據庫裏是顯示不出來的,這就是看不見的未知字符啦。另外,我也嘗試了一下,EditPlus並不能把這些看不見的字符顯示出來,成上面的樣子哦。eclipse

           然而,待俺把數據這個數據所有替成空,提交完寫好SQL腳本後,我就想,這個看不見的字符底是個啥玩意兒呢?由於前端用的Extjs,因此,固然是去翻翻看,關於String字符串的處理方法咯。偶試過編輯器

1.Ext.String.htmlEncode(value);  編碼字符串,對其中特殊字符進行轉義編碼

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

2.Ext.String.htmlDecode(value);  解碼字符串,對其中的轉義字符進行還原spa

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

然而並不起什麼用。code

              試過用正則去匹配上面看不見的字符,還試着加轉義字符。仍是沒有用啊。。。。。htm

             因而,我跟領導提議,禁用粘貼功能吧。我代碼都寫好啦~~~

    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裏看看,個人乖乖,沒問題了。特殊字符處理掉了。

至此,大功告成,不再用擔憂被用戶罵了~~~~~~~~

相關文章
相關標籤/搜索