문자 집합의 제한 등으로 인해, 일반적인 유니코드나 ANSI 문자 집합을 그대로 쓸 수 없을 때가 있습니다. 특히 텍스트를 XML이나 이메일 등으로 전달해야 할 때 이런 일이 종종 발생합니다. 이럴 때 우회하는 인코딩 방법으로 base64 인코딩이나 URL 인코딩이 많이 쓰입니다. 여기에선 URL 인코딩을 알아 보겠습니다.
 
URL 인코딩은 인터넷 익스플로러에서 사이트 주소를 보다 보면 쉽게 발견할 수 있을 정도로 많이 쓰이는 인코딩입니다. 실제로 구현해 보니 base64 인코딩보다 인코딩 효율이 떨어지는 단점이 있지만, 구현이 간단하고 이해하기 쉬워서 좋습니다.

URL 인코딩을 하려면, 알파벳, 숫자, -, ., _, 그리고 ~는 그대로 표현하고, 그 외의 문자는 16진수로 변환한 값 앞에 %를 붙여서 표현하면 됩니다.

다음은 소스 코드입니다.
using std::string;

string encode(const string& source)
{
string target;

for (string::const_iterator iterator = source.begin(); iterator != source.end(); ++iterator)
{
const unsigned char source_character = static_cast<unsigned char>(*iterator);

if (isalnum(source_character) || strchr("-._~", source_character))
target += source_character;
else
{
target += '%';
target += convert_to_hex(source_character >> 4);
target += convert_to_hex(source_character);
}
}

return target;
}

char convert_to_hex(char code)
{
return "0123456789abcdef"[code & 0xf];
}
참고:
2010/07/22 13:39 2010/07/22 13:39

트랙백 주소 :: http://www.easyisright.net/trackback/653

댓글을 달아 주세요

  1. Ben 2010/07/22 22:27  댓글주소  수정/삭제  댓글쓰기

    -_.~ 이 부분이 아름답군요 크크. ^^

    • 조순현 2010/07/25 17:48  댓글주소  수정/삭제

      ㅎㅎ 보다 보니 문자 아스키 코드 순서와 맞지 않아서, -._~로 수정했습니다;;

  2. 찰스 2010/08/19 10:15  댓글주소  수정/삭제  댓글쓰기

    그렇군요 .