2012-08-15 2 views
0

나는 IRB에 다음 코드를 실행하면 :왜 내 코드가 16 진수를 올바르게 읽지 못합니까?

1.9.3p194 :001 > x = %w(‎61 6C 6C 20 75 72 20 73 79 73 74 65 6D 73 20 62 65 6C 6F 6E 67 20 32 20 75 73) 
1.9.3p194 :002 > puts x.map {|z| z.to_i(16)}.map(&:chr).join.inspect 

내가 얻을 :

"\x00ll ur systems belong 2 us" 
=> nil 

그러나 "61".to_i(16).chr "a"하지 "\x00"입니다.

어떻게 될까요?

답변

6

%w( 바로 뒤에 보이지 않는 유니 코드 left-to-right mark,이있는 것이 문제입니다. 그것은 스택 오버플로를 통해 볼 때 UTF-8로 인코딩 된 것으로 나타나지만 원 원본에서는 (Windows?) UTF-16이었던 것 같습니다.

+0

와우, 그건 좀 이상 하긴하지만, 그것을 보여줍니다. 추가 설명 : 예제에서 붙여 넣기를 복사하면'x = % w (\ U + FFE261 6C 6C 20 75 72 20 73 79 73 74가됩니다. 65 6D 73 20 62 65 6C 6F 6E 67 20 32 20 75 73)' – DGM

관련 문제