2010-12-15 20 views
6

No puedo iterar sobre todo el rango de caracteres Unicode.Ruby: Borrando todos los caracteres Unicode (UTF8/Codificación/Manipulación de cadenas)

He buscado por todas partes ...

Estoy construyendo un fuzzer y incoporar en una URL, todos los caracteres Unicode (uno a la vez).

Por ejemplo: http://www.example.com?a=\uff1c

Sé que hay algunas herramientas integradas pero necesitan más flexibilidad.

Si pudiera hacer algo como lo siguiente: "\u" + "ff1c" sería genial.

Este es el más cercano que tengo:

char = "\u0000" 
... 

#within iteration 

char.succ! 

... 

pero después el carácter "\u0039", que es el número 9, voy a conseguir "10" en lugar de ":"

+0

¿No le cuesta al punto de fuzzing intentar generar solo puntos de código Unicode válidos? –

Respuesta

2

Se podría utilizar el paquete de convertir números a caracteres UTF8 pero no estoy seguro si esto resuelve tu problema.

Puede crear una matriz con valores numéricos de todos los caracteres y usar el paquete para obtener una cadena UTF8 o puede simplemente hacer un bucle desde 0 a lo que necesite y usar el paquete dentro del bucle.

He escrito un pequeño ejemplo para explicarme. El siguiente código imprime el valor hexadecimal de cada carácter seguido del propio carácter.

0.upto(100) do |i| 
    puts "%04x" % i + ": " + [i].pack("U*") 
end 
1

Aquí hay algo de código más simple, aunque un poco ofuscado, que se aprovecha del hecho de que Ruby convertirá un entero en el lado derecho del operador < < a un punto de código. Esto solo funciona con Ruby 1.8 para valores enteros < = 255. Funcionará para valores superiores a 255 en 1.9.

0.upto(100) do |i| 
    puts "" << i 
end 
Cuestiones relacionadas