ÇÑ±Û ASCII Äڵ带 À¥ URL¿¡¼ »ç¿ëµÇ´Â UTF8 ÄÚµå·Î º¯È¯ |
|
|
 |
8³â Àü |
À¥¿¡¼´Â ASCII Çü½ÄÀÇ ¹®ÀÚ¿ÀÌ »ç¿ëµÇÁö ¾Ê°í UTF8 Çü½ÄÀÇ ¹®ÀÚ¿ÀÌ »ç¿ëµË´Ï´Ù. ƯÈ÷ URL¿¡¼ ÇѱÛÀÌ
Àû¿ëµÇ´Â ÇüÅ´ UTF8 Çü½Ä¿¡¼ ÇÑ´Ü°è ´õ º¯ÇüµÈ ÇüÅ°¡ »ç¿ëµË´Ï´Ù. ¿¹¸¦ µé¾î °Ë»ö»çÀÌÆ® ¿¡¼ "ÇѱÛ"
À̶ó´Â ´Ü¾î¸¦ °Ë»öÇÏ°Ô µÇ¸é Àû¿ëµÇ´Â URL¿¡¼ "ÇѱÛ" À̶ó´Â ´Ü¾î´Â "%ED%95%9C%EA%B8%80"
°ú °°Àº ÇüÅ·Πº¯Çü µÇ¾î »ç¿ëµË´Ï´Ù.
ÀÏ¹Ý ÇÁ·Î±×·¡¹Ö½Ã »ç¿ëµÇ´Â ¹®ÀÚ¿ÀÇ ÇüÅ´ ASCII ÄÚµåÀ̱⠶§¹®¿¡ À¥°ú °ü·ÃµÈ ÇÁ·Î±×·¡¹ÖÀ» À§Çؼ´Â
ASCII ÄÚµå ÇüÅÂÀÇ ¹®ÀÚ¿À» UTF8 ÇüÅ·Πº¯ÇüÇØ¾ß ÇÏ°í URL¿¡ Àû¿ëµÇ´Â ÇѱÛÀÇ °æ¿ì À§¿Í °°ÀÌ ÇÑ´Ü°è
´õ º¯ÇüµÈ ÇüÅ·ΠÇÁ·Î±×·¡¹ÖÀÌ ÀÌ·ç¾î Á®¾ß ÇÕ´Ï´Ù.
ÇÑ±Û ASCII Äڵ带 UTF8 ÄÚµå·Î º¯È¯Çϱâ À§Çؼ ASCII Äڵ带 UTF8 ÄÚµå·Î ¹Ù·Î º¯È¯ÇÒ ¼ö ÀÖ´Â ÇÔ¼ö°¡
¾ø±â ¶§¹®¿¡ ¸ÕÀú ASCII Äڵ带 À¯´ÏÄÚµå·Î º¯È¯ÇÏ°í º¯È¯µÈ À¯´ÏÄڵ带 UTF8 ÄÚµå·Î º¯È¯ÇØ¾ß ÇÕ´Ï´Ù.
"ASCII ÄÚµå" -> "À¯´ÏÄÚµå" -> "UTF8 ÄÚµå"
ASCII Äڵ带 À¯´ÏÄÚµå·Î º¯È¯Çϱâ À§Çؼ´Â MultiByteToWideChar ÇÔ¼ö¸¦ »ç¿ëÇÏ°í À¯´ÏÄڵ带
ASCII ÄÚµå·Î º¯È¯Çϴ°ÍÀº Ưº°ÇÑ ÇÔ¼ö¸¦ »ç¿ëÇÏÁö ¾Ê¾Æµµ CString Ŭ·¡½º°¡ º¯È¯ÇØ Áֱ⠶§¹®¿¡
CString Ŭ·¡½º¸¦ »ç¿ëÇÏ¸é µË´Ï´Ù.
±×¸®°í º¯È¯µÈ ÇÑ±Û UTF8 Äڵ带 URL¿¡¼ Àû¿ëµÇ´Â ÇüÅ·Πº¯ÇüÇÕ´Ï´Ù. ´Ü, ¿µ¾îÀÇ °æ¿ì Çѱ۰ú °°ÀÌ
UTF8 Äڵ忡¼ ÇÑ´Ü°è ´õ º¯ÇüµÈ ÇüÅ·Π»ç¿ëµÇÁö ¾Ê½À´Ï´Ù. ¿µ¾î´Â UTF8 ÄÚµå ÇüÅ ±×´ë·Î »ç¿ëµÇ°í
ÇѱÛÀÏ °æ¿ì¿¡¸¸ À§¿Í °°ÀÌ º¯Çü µÇ¾î »ç¿ëµË´Ï´Ù.
// UTF8 ÄÚµå·Î º¯È¯ÇÏ°íÀÚ ÇÏ´Â CString ŸÀÔÀÇ parm_ascii_string, UTF8 ÄÚµå·Î º¯È¯µÈ
// °ªÀ» ³Ö¾îÁÙ CString ŸÀÔÀÇ parm_utf8_string 2°³ÀÇ ÇÔ¼ö ÀÎÀÚ¸¦ »ç¿ëÇÑ´Ù.
void AsciiToUTF8(CString parm_ascii_string, CString &parm_utf8_string)
{
parm_utf8_string.Empty();
// ¾Æ½ºÅ° Äڵ带 UTF8Çü½ÄÀÇ ÄÚµå·Î º¯È¯ÇØ¾ß ÇÑ´Ù. ¾Æ½ºÅ° Äڵ带 UTF8 ÄÚµå·Î º¯È¯ÇÒ¶§´Â
// ¾Æ½ºÅ° Äڵ带 À¯´ÏÄÚµå·Î ¸ÕÀú º¯È¯ÇÏ°í º¯È¯µÈ À¯´ÏÄڵ带 UTF8 ÄÚµå·Î º¯È¯ÇØ¾ß ÇÑ´Ù.
// ¾Æ½ºÅ° ÄÚµå·ÎµÈ ¹®ÀÚ¿À» À¯´ÏÄÚµåÈ ½ÃÄ×À» ¶§ÀÇ ±æÀ̸¦ ±¸ÇÑ´Ù.
int temp_length = MultiByteToWideChar(CP_ACP, 0, (char *)(const char *)parm_ascii_string, -1, NULL, 0);
// º¯È¯µÈ À¯´ÏÄڵ带 ÀúÀåÇÒ °ø°£À» ÇÒ´çÇÑ´Ù.
BSTR unicode_str = SysAllocStringLen(NULL, temp_length + 1);
// ¾Æ½ºÅ° ÄÚµå·ÎµÈ ¹®ÀÚ¿À» À¯´Ï ÄÚµå Çü½ÄÀÇ ¹®ÀÚ¿·Î º¯°æÇÑ´Ù.
MultiByteToWideChar(CP_ACP, 0, (char *)(const char *)parm_ascii_string, -1, unicode_str, temp_length);
// À¯´ÏÄÚµå Çü½ÄÀÇ ¹®ÀÚ¿À» UTF8 Çü½ÄÀ¸·Î º¯°æÇßÀ»¶§ ÇÊ¿äÇÑ ¸Þ¸ð¸® °ø°£ÀÇ Å©±â¸¦ ¾ò´Â´Ù.
temp_length = WideCharToMultiByte( CP_UTF8, 0, unicode_str, -1, NULL, 0, NULL, NULL );
if(temp_length > 0){
CString str;
// UTF8 Äڵ带 ÀúÀåÇÒ ¸Þ¸ð¸® °ø°£À» ÇÒ´çÇÑ´Ù.
char *p_utf8_string = new char[temp_length];
memset(p_utf8_string, 0, temp_length);
// À¯´ÏÄڵ带 UTF8ÄÚµå·Î º¯È¯ÇÑ´Ù.
WideCharToMultiByte(CP_UTF8, 0, unicode_str, -1, p_utf8_string, temp_length, NULL, NULL);
// UTF8 Çü½ÄÀ¸·Î º¯°æµÈ ¹®ÀÚ¿À» °¢ ¹®ÀÚÀÇ Äڵ尪º°·Î À¥ URL¿¡ »ç¿ëµÇ´Â Çü½ÄÀ¸·Î º¯È¯ÇÑ´Ù.
for(int i = 0; i < temp_length - 1; i++){
if(p_utf8_string[i] & 0x80){
// ÇöÀç Äڵ尡 ÇѱÛÀÎ °æ¿ì..
// UTF8 ÄÚµå·Î Ç¥ÇöµÈ ÇѱÛÀº 3¹ÙÀÌÆ®·Î Ç¥½ÃµÈ´Ù. "ÇѱÛ" -> %ED%95%9C%EA%B8%80
for(int sub_i = 0; sub_i < 3; sub_i++){
str.Format("%%%X", p_utf8_string[i] & 0x00FF);
parm_utf8_string += str;
i++;
}
i--;
} else {
// ÇöÀç Äڵ尡 ¿µ¹®ÀÎ °æ¿ì, º¯°æ¾øÀÌ ±×´ë·Î »ç¿ëÇÑ´Ù.
parm_utf8_string += p_utf8_string[i];
}
}
delete[] p_utf8_string;
}
// À¯´ÏÄÚµå Çü½ÄÀÇ ¹®ÀÚ¿À» ÀúÀåÇϱâ À§ÇØ »ý¼ºÇß´ø ¸Þ¸ð¸®¸¦ »èÁ¦ÇÑ´Ù.
SysFreeString(unicode_str);
}
|
|
̵̧ : 417 |
̵̧
¸ñ·Ï
|
|