2017-08-17 1 views
-3

J'ai un flux de chaîne où il a un caractère inconnu au début et à la fin.Javascript - comment détecter un caractère inconnu au début et à la fin?

enter image description here

Comment puis-je détecter que le premier caractère inconnu et le dernier? J'ai essayé de suivre mais il ne correspond pas avec des listes \uxxxx tels que:

\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?

code:

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; 
     } 

} 

EDIT: flux de données. \u0002 et \u0003 ne correspondant pas.

enter image description here

EDIT: Parser travaille

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

Pourquoi étiqueter jQuery? – GolezTrol

+1

Il y a plus de caractères que 0001 à 001f. (environ 65000 de plus dans UCS2). Utilisez charCodeAt pour voir de quel caractère il s'agit: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/charCodeAt – GolezTrol

+1

Eh bien, voici votre réponse. Le caractère est 2 (=/u0002). Maintenant que vous avez confirmé que c'est en effet, vous pouvez revenir à la découverte de pourquoi votre code ne l'a pas trouvé. C'est peut-être parce que 'ch' contient la chaîne entière, pas seulement le premier caractère, et à cause de cela le cas ne correspond pas. – GolezTrol

Répondre

0

Utilisez regex pour correspondre au modèle, exemple- '/ ([^ \ U0002] * +) $' essai (. str);

+2

Peut-être que mon regex est rouillée, mais je pense que cela correspond à des chaînes commençant par \ u0002? Qu'en est-il des autres possibilités? – GolezTrol

+2

str.replace (/ 2 | \ u0002/g, "") - utilisez simplement remplacer .. qui va supprimer l'avant et le dernier élément de la chaîne –

+1

Sinon, si vous êtes sûr, il sera présent au début et à la fin de la chaîne, il suffit de l'enlever et d'obtenir la sous-chaîne. Exemple - var st = "2sdfsdfsdf5" st = st.substring (1) // la sortie sera "sdfsdfsdf5" st = st.substring (0, st.length-1) // la sortie sera "sdfsdfsdf" –