2017-08-15 4 views
0

j'ai posé la question il y a Transform patterns of code points in a binary 1 heure: je avais besoin de convertir des jeux comme [$a-z] en binaire comme ceci:octets étranges lors de la conversion des ensembles de points de code en binaire

01 24 // $ 
00 // interval between 2 code points 
61 00 // a 
7a 00 // z 

Je reçois des ensembles comme [$a-z] de la UnicodeSet site. Il vous suffit de saisir un motif et de générer un ensemble de points de code.

J'ai réécrit un peu de mon simple, mais non trivial, UnicodeSet au convertisseur d'ensemble binaire. Maintenant, au lieu de lire de vrais points de code, j'ai lu leur formulaire d'échappement \u en activant l'option Escape sur le site UnicodeSet. Je l'ai fait parce que le navigateur cherche à supprimer certains caractères de l'ensemble retourné.

Cependant, ma sortie finale pour l'ensemble retourné par le modèle [:age=5.0:]&[[:gc=L:][:gc=Nl:][:gc=Mn:][:gc=Mc:][:gc=Nd:][:gc=Pc:]\$_] après la conversion en binaire par moi-même semble avoir de faux substituts.

drugs...

Ma fonction pour la lecture et sauter un point de code individuel dans l'ensemble d'entrée est nextCodePoint:

function nextCodePoint() 
    { 
     u_ch = input.charCodeAt(inputOffset); 
     __escaped__ = false; 

     // Handle escape 
     if (u_ch === 0x5C) 
     { 
     __escaped__ = true; 
     u_ch = input.charCodeAt(inputOffset + 1); 

     // Handle \u 
     if (u_ch === 0x75) 
     { 
      inputOffset += 2; 

      // Skip the left XXXX base 
      u_start = inputOffset; 
      inputOffset += 4; 

      // Skip the right XXXX base (limited for messy patterns) 
      if (input.charCodeAt(inputOffset) !== 0x5C) 
      inputOffset += 4; 

      return parseInt(input.slice(u_start, inputOffset), 16); 
     } 
     } 
     ++inputOffset; 
     return u_ch; 
    } 

Toutes les idées?

+0

Quelle est exactement l'entrée, ce qui est le résultat attendu, et quelle est la sortie réelle de cette fonction? – Bergi

+0

@Bergi L'entrée est un fichier contenant l'ensemble de points de code retourné par le site UnicodeSet, où nous mettons des modèles tels que '[: gc = L:]'. Il y en a même un dans ma question. La sortie est si grande et difficile à déterminer que je ne peux pas mettre ici. – Hydro

+0

@Bergi S'il vous plaît ignorer mon avertissement à propos de plus gros points de code. J'ai regardé mal. – Hydro

Répondre

0

Mon codage UTF-16 était correct, mais le problème était que j'ai cherché \u échappe, mais pas pour \U échappe. Le site UnicodeSet renvoie \uXXXX ou \UXXXXXXXX dans certaines parties.

ici:

function nextCodePoint() 
{ 
    u_ch = input.charCodeAt(inputOffset); 
    __escaped__ = false; 

    // Handle escape 
    if (u_ch === 0x5C) 
    { 
    __escaped__ = true; 
    u_ch = input.charCodeAt(inputOffset + 1); 

    u_upper = (u_ch === 0x55); 

    // Handle \u 
    if (u_upper || (u_ch === 0x75)) 
    { 
     inputOffset += 2; 

     // Skip the left XXXX base 
     u_start = inputOffset; 
     inputOffset += 4; 

     // Skip the right XXXX base 
     if (u_upper) inputOffset += 4; 

     return parseInt(input.slice(u_start, inputOffset), 16); 
    } 
    } 
    ++inputOffset; 
    return u_ch; 
}