문자 집합의 제한 등으로 인해, 일반적인 유니코드나 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