2010-12-15 8 views
6

유니 코드 문자의 전체 범위를 반복 처리 할 수 ​​없습니다.루비 : 모든 유니 코드 문자로 퍼지하기 (UTF8/인코딩/문자열 조작)

나는 모든 곳에서 검색

...

나는 fuzzer를 구축하고 URL에 포함시킬하고, 모든 유니 코드 문자 (한 번에). 예를 들어

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

내가 거기에 몇 가지 내장 도구가 있지만 좀 더 유연성이 필요하다는 것을 알고있다.

만약 내가 다음과 같은 someting 할 수 있습니다 : "\u" + "ff1c" 그것은 좋을 것입니다.

char = "\u0000" 
... 

#within iteration 

char.succ! 

... 

하지만

은 숫자 9가 문자 "\u0039", 후, 나는 대신에 "10"을 얻을 것이다 ""

이 내가 가진 가장 가까운

+0

올바른 유니 코드 코드 포인트 만 생성하려고 시도하기 위해 퍼지 (fuzzing)의 모든 부분을 무시하지 않습니까? –

답변

2

당신이 팩을 사용할 수 있습니다 숫자를 UTF8 문자로 변환하지만이 방법으로 문제가 해결되는지 확신 할 수 없습니다.

모든 문자의 숫자 값을 가진 배열을 만들고 pack을 사용하여 UTF8 문자열을 얻을 수도 있고, 필요에 따라 0에서 루프하여 루프 내에서 pack을 사용할 수도 있습니다.

나 자신을 설명하기 위해 작은 예제를 작성했습니다. 아래의 코드는 각 문자의 16 진수 값과 문자 자체를 출력합니다.

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

여기에 약간 루비는 코드 포인트에 < < 연산자의 오른쪽에 정수를 변환 할 것이라는 사실을 활용하는, 난독이기는하지만, 몇 가지 간단한 코드입니다. 이것은 정수 값 < = 255에 대해서만 Ruby 1.8에서 작동합니다. 1.9에서 255보다 큰 값에서 작동합니다.

0.upto(100) do |i| 
    puts "" << i 
end 
관련 문제