具有C语言的文本转换UTF-8 [英] text conversion UTF-8 with c-language
问题描述
嗨.
我是日本学生.
我制作果酱游戏项目.
我有关于文本转换(到UTF8或从UTF8转换)的问题.
您有使用c语言的解决方案吗?
很感谢. :)
ps.我使功能-仅C版本
原始代码
-------------------------------------------------- ---------------------------------------
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);
// 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;
}
推荐答案
从此处开始: ^ ]
这篇关于具有C语言的文本转换UTF-8的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!