2020년 4월 11일 토요일

MFC URLDecode 처리

오늘 이야기할 내용은 웹에서 넘겨져온 데이터를 처리할때 한글이 깨지거나 특수문자등이 깨지지 않게 처리 데이터를 받아 내리는 방법중 URLEncode 되어서 넘겨진 데이터를 DeCode 하는 방법을 이야기 할까 합니다.

URLEncode 하는 방법은 아래 링크로 확인하세요.

물론 웹에서 넘겨온 데이터가 URLEncode로 처리가 되어진 문자열 이어야 합니다.

일단 소스부터 볼께요.


BYTE ConByte(const BYTE& uc) { return uc > 57 ? uc - 55 : uc - 48; }

CString ConvertURLDecode(CString sOrg)
{
 CString sOut;
 const int nLen = sOrg.GetLength() + 1;
 register LPBYTE pOutTmp = NULL;
 LPBYTE pOutBuf = NULL;
 register LPBYTE pInTmp = NULL;
 LPBYTE pInBuf = (LPBYTE)sOrg.GetBuffer(nLen);
 //alloc out buffer
 pOutBuf = (LPBYTE)sOut.GetBuffer(nLen);

 if (pOutBuf)
 {
  pInTmp = pInBuf;
  pOutTmp = pOutBuf;
  // do encoding
  while (*pInTmp)
  {
   if ('%' == *pInTmp)
   {
    pInTmp++;
    *pOutTmp++ = (ConByte(*pInTmp) % 16 << 4) + ConByte(*(pInTmp + 1)) % 16;
    pInTmp++;
   }
   else
    *pOutTmp++ = *pInTmp;
   pInTmp++;
  }
  *pOutTmp = '\0';
  sOut.ReleaseBuffer();
 }
 sOrg.ReleaseBuffer();

 return sOut;
}
[위 소스는 Visual Studio 2017, Window 10 64bit 환경에서 빌드 되었습니다.]

소스를 보시면 아시겠지만 URLDecode는 헥사로 변환된 문자열을 다시 바이트 문자열로 변환하는 코드 입니다.

웹에서 넘겨진 데이터가 URLEncode로 변환 되어졌을경우 만든는 프로그램 환경이 UTF-8 환경이면 Decode 코드로만 처리가 되지만 Ansi 환경일 경우에는 UTF8 을 Ansi 로 바꾸는것을 Decode 하고 난후 처리 해야 한글 같은것을 정상적으로 처리 하실수 있습니다.

아래 링크도 필요하시면 확인 하시기 바랍니다.

그럼 ^^

댓글 없음: