hi.
i am jap student.
i make marmalade game project.
i have problem about Text Conversion ( to/from UTF8 ).
do you have solution with c-language?
very thanks. :)
ps. i make function - only c version
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 <=2147483647)
{
bt1 = (BYTE)(252 + (ch / 1073741824));
bt2 = (BYTE)(128 + ((ch / 16777216) % 64));
bt3 = (BYTE)(128 + ((ch / 262144) % 64));
bt4 = (BYTE)(128 + ((ch / 4096) % 64));
bt5 = (BYTE)(128 + ((ch / 64) % 64));
bt6 = (BYTE)(128 + (ch % 64));
sTemp.Format(_T("=%02X=%02X=%02X=%02X=%02X=%02X"), bt1, bt2, bt3, bt4, bt5, bt6);
sFinal += sTemp;
}
}
return sFinal;
}
my code
-----------------------------------------------------------------------------------------------------
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);
char str[900];
unsigned short *sTemp;
for (n = 0; n < nMax; ++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;
}