2017-08-17 165 views
-3

我有字符串流,它有開始和結束的未知字符。Javascript - 如何在開始和結束時檢測未知字符?

enter image description here

如何檢測,首先未知字符,最後一個?我試過以下但它不符合任何\uxxxx名單如:

\u0000\u0001\u0002\u0003\u0004\u0005\u0006\u0007\b\t\n\u000b\f\r\u000e\u000f\u0010\u0011\u0012\u0013\u0014\u0015\u0016\u0017\u0018\u0019\u001a\u001b\u001c\u001d\u001e\u001f

代碼:

var ab2str = function(buf) { 
     var bufView = new Uint8Array(buf); 
     var encodedString = String.fromCharCode.apply(null, bufView); 
     return decodeURIComponent(escape(encodedString)); 
    }; 

function in(data) { 

    var ch = ab2str(data); ch = ch.toString('utf8'); 
    switch (ch) { 
      case "\u0002": 
      console.log('>>> STARTED'); 
      break; 

      case "\u0003": 
      console.log('>>> ENDED'); 
      break; 

      default: 
       //var WINDOWS_1252 = '\u0000\u0001\u0002\u0003\u0004\u0005\u0006\u0007\b\t\n\u000b\f\r\u000e\u000f\u0010\u0011\u0012\u0013\u0014\u0015\u0016\u0017\u0018\u0019\u001a\u001b\u001c\u001d\u001e\u001f !"#$%&\'()*+,-./:;<=>[email protected][\\]^_`abcdefghijklmnopqrstuvwxyz{|}~€�‚ƒ„…†‡ˆ‰Š‹Œ�Ž��‘’「」•–—˜™š›œ�žŸ ¡¢£¤¥¦§¨©ª«¬­®¯°±²³´µ¶·¸¹º»¼½¾¿ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖ×ØÙÚÛÜÝÞßàáâãäåæçèéêëìíîïðñòóôõö÷øùúûüýþÿ'; 

       console.log('????????? why always default ???????'); 
      break; 
     } 

} 

編輯:數據的流。 \u0002\u0003不匹配。

enter image description here

編輯:分析器工作

serial.onReceive.addListener(function(receiveInfo) { 
    if (receiveInfo.connectionId !== connectionId) { 
     console.log("FAIL: connectionId mismatch"); 
     return; 
    } 

    var ch = ab2str(receiveInfo.data); 
    ch = ch.toString('utf8');  
    var check = ch.charCodeAt(0); 

    if(check == 2) { 
     console.log('>>> STARTED'); 
     lineBuffer = ""; 
    } 

    switch (ch) { 
     default:   
     lineBuffer += ab2str(receiveInfo.data); 
     console.log('>>> ???: ' , ab2str(receiveInfo.data)); 

     var check_end = lineBuffer.charCodeAt(lineBuffer.length-1); 
     if(check_end == 3) { 
      var cake = lineBuffer.substring(1); 
      cake = cake.substring(0,cake.length-1); 
      console.log('>>> CAKE: ' , cake); 
      lineBuffer = ""; 
     } 
     break; 
    }  

    }); 
+0

爲什麼要標記jQuery? – GolezTrol

+1

有比0001到001f更多的字符。 (在UCS2中約65000多)。使用charCodeAt來查看它實際是哪個字符:https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/charCodeAt – GolezTrol

+1

嗯,這是你的答案。該字符是2(=/u0002)。現在您確認了確實如此,您可以回頭找出您的代碼沒有找到它的原因。也許是因爲'ch'包含整個字符串,而不僅僅是第一個字符,並且因爲這種情況不匹配。 – GolezTrol

回答

0

使用正則表達式匹配的模式, 例 - '/([^ \ U0002] * +)$' 測試(。 STR);

+2

也許我的正則表達式是生鏽的,但我認爲這匹配以\ u0002開頭的字符串?其他可能性呢? – GolezTrol

+2

str.replace(/ 2 | \ u0002/g,「」) - 使用只是替換..這將從字符串中刪除前面和最後一個項目 –

+1

否則如果您確定,它會出現在開頭和結尾的字符串,只需刪除它並獲取子字符串。示例 - var st =「2sdfsdfsdf5」 st = st.substring(1)//輸出將是「sdfsdfsdf5」 st = st.substring(0,st.length-1)//輸出將是「sdfsdfsdf」 –

相關問題