2017-08-17 148 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” –

相关问题