URL 인코딩

──────

 7비트만 처리할 수 있는 장비를 사용하는 경우, 8비트 데이터를 보낼 수 있게 만드는 인코딩 기술이 있습니다. 여기서 8비트 값을 7비트화 시키는 기술을 'URL 인코딩'이라고 부릅니다.

▶ 4비트 숫자를 첫 비트가 0인 8비트 숫자로 바꾸는 것이 URL 인코딩입니다.

▶ 숫자를 7비트 아스키 코드로 바꾸는 것이 URL 인코딩입니다.


 방법


보내려는 데이터가 영어 알파벳 'A'라고 가정해봅시다.

'A'의 코드 값 : 0x41 (01000001) <-- 7비트 장비를 통과하더라도 데이터를 잃지 않습니다. 7비트 장비에 통과된 값은 첫번째 비트 '0'을 제외한 1000001 이지만 데이터를 인코딩하면서 다시 맨 처음에 0 값을 추가하기 

때문이죠. 그래서 결과적으로 01000001 이 출력됩니다.



 but!

──────

한글의 경우 첫번째 비트 값이 '1'이 들어가기 때문에 7 비트 장비를 통과하면 앞자리 비트가 0으로 바뀌어 깨지게 됩니다. 

'가'의 코드 값 : 0xAC00(10101100 00000000) <-- 7비트 장비를 통과 후 00101100 0000 의 값이 출력되어 데이터가 깨집니다.




 해결


'가'의 코드 값(0xAC00)을 ASCII 코드로 문자화 시킵니다.

만약 유니코드 값을 그대로 ASCII 코드로 문자화 시킨다면,

%AC%00 : '%' -> 25 'A'- > 41 'B' -> 43 'C' -> 25 '0' -> 30 '0' -> 30이 될 것입니다. 물론 2바이트로 보내면 될 것을 ASCII 코드로 문자화 시키면 6 바이트로 보내야 합니다. 이에 따라 보내는 데이터의 크기는 커지지만 7비트 장비를 무사히 통과할 수 있습니다.



GET 또는 POST 요청을 할 때 보내는 데이터는 웹 브라우저가 자동으로 URL

인코딩을 합니다. 그 후에 서블릿 컨테이너가 자동으로 디코딩을 합니다.

개발자가 따로 인코딩/디코딩을 할 필요가 없어집니다.


 단, 쿠키로 데이터를 보낼 때는 개발자가 인코딩을 해주어야 하고,

    그것을 다시 읽을 때는 개발자가 디코딩 해주어야 합니다.


블로그 이미지

필로그래머

,