Click here to Skip to main content
15,904,822 members

Comments by younwoo (Top 2 by date)

younwoo 18-Sep-12 2:26am View    
thanks. ^^
younwoo 18-Sep-12 2:17am View    
Deleted
thanks.

i have add-question.



i make EncodeToUTF8 function. ( only c languege ) - http://www.codeproject.com/Articles/5281/UTF-8-Encoding-and-Decoding

it dont work.

what is problem? ..

--------------------------------------------------------

int EndcodeToUTF8(const char * szSource , unsigned short *UniCodeString)
{
int returnValue = -1;

unsigned short ch;

unsigned char bt1, bt2, bt3, bt4, bt5, bt6;

int n, nMax = strlen(szSource);

char testStr[100];
strcpy(testStr,"테스트");
n = nMax = strlen(testStr);

char fStr[900];
memset(fStr,0,900);

// int8 * fStr = (uint8*)UniCodeString;

char str[900];
unsigned short *sTemp;

for (n = 0; n < nMax; ++n)
{
// ch = (unsigned short)szSource[n];
ch = (unsigned short)testStr[n];

if ( ch == '=' )
{

sprintf( str , "=%02X" , ch );

strcat(fStr,str);

}
else if (ch < 128)
{

sprintf( str , "%c" , szSource[n] );

strcat(fStr,str);
}
else if (ch <= 2047)
{
bt1 = (unsigned char)(192 + (ch / 64));
bt2 = (unsigned char)(128 + (ch % 64));


sprintf( str , "=%02X=%02X" , bt1, bt2);

strcat(fStr,str);
}
else if (ch <= 65535)
{
bt1 = (unsigned char)(224 + (ch / 4096));
bt2 = (unsigned char)(128 + ((ch / 64) % 64));
bt3 = (unsigned char)(128 + (ch % 64));


sprintf( str , "=%02X=%02X=%02X" , bt1, bt2, bt3);

strcat(fStr,str);
}
else if (ch <= 2097151)
{
bt1 = (unsigned char)(240 + (ch / 262144));
bt2 = (unsigned char)(128 + ((ch / 4096) % 64));
bt3 = (unsigned char)(128 + ((ch / 64) % 64));
bt4 = (unsigned char)(128 + (ch % 64));


sprintf( str ,"=%02X=%02X=%02X=%02X" ,bt1, bt2, bt3, bt4);
strcat(fStr,str);
}
else if (ch <=67108863)
{
bt1 = (unsigned char)(248 + (ch / 16777216));
bt2 = (unsigned char)(128 + ((ch / 262144) % 64));
bt3 = (unsigned char)(128 + ((ch / 4096) % 64));
bt4 = (unsigned char)(128 + ((ch / 64) % 64));
bt5 = (unsigned char)(128 + (ch % 64));

sprintf( str ,"=%02X=%02X=%02X=%02X=%02X" ,bt1, bt2, bt3, bt4, bt5);

strcat(fStr,str);
}
else if (ch <=2147483647)
{
bt1 = (unsigned char)(252 + (ch / 1073741824));
bt2 = (unsigned char)(128 + ((ch / 16777216) % 64));
bt3 = (unsigned char)(128 + ((ch / 262144) % 64));
bt4 = (unsigned char)(128 + ((ch / 4096) % 64));
bt5 = (unsigned char)(128 + ((ch / 64) % 64));
bt6 = (unsigned char)(128 + (ch % 64));

sprintf( str ,"=%02X=%02X=%02X=%02X=%02X=%02X" ,bt1, bt2, bt3, bt4, bt5, bt6);

strcat(fStr,str);
}
}

return returnValue;
}

original code
----------------------------------------------------------------------------------------
CString EncodeToUTF8(LPCTSTR szSource)
{
WORD ch;

BYTE bt1, bt2, bt3, bt4, bt5, bt6;

int n, nMax = _tcslen(szSource);

CString sFinal, sTemp;

for (n = 0; n < nMax; ++n)
{
ch = (WORD)szSource[n];

if (ch == _T('='))
{
sTemp.Format(_T("=%02X"), ch);

sFinal += sTemp;
}
else if (ch < 128)
{
sFinal += szSource[n];
}
else if (ch <= 2047)
{
bt1 = (BYTE)(192 + (ch / 64));
bt2 = (BYTE)(128 + (ch % 64));

sTemp.Format(_T("=%02X=%02X"), bt1, bt2);

sFinal += sTemp;
}
else if (ch <= 65535)
{
bt1 = (BYTE)(224 + (ch / 4096));
bt2 = (BYTE)(128 + ((ch / 64) % 64));
bt3 = (BYTE)(128 + (ch % 64));

sTemp.Format(_T("=%02X=%02X=%02X"), bt1, bt2, bt3);

sFinal += sTemp;
}
else if (ch <= 2097151)
{
bt1 = (BYTE)(240 + (ch / 262144));
bt2 = (BYTE)(128 + ((ch / 4096) % 64));
bt3 = (BYTE)(128 + ((ch / 64) % 64));
bt4 = (BYTE)(128 + (ch % 64));

sTemp.Format(_T("=%02X=%02X=%02X=%02X"), bt1, bt2, bt3, bt4);
sFinal += sTemp;
}
else if (ch <=67108863)
{
bt1 = (BYTE)(248 + (ch / 16777216));
bt2 = (BYTE)(128 + ((ch / 262144) % 64));
bt3 = (BYTE)(128 + ((ch / 4096) % 64));
bt4 = (BYTE)(128 + ((ch / 64) % 64));
bt5 = (BYTE)(128 + (ch % 64));

sTemp.Format(_T("=%02X=%02X=%02X=%02X=%02X"), bt1, bt2, bt3, bt4, bt5);
sFinal += sTemp;
}
else if (ch