UTF8-GB2312
int UTF82UCS(unsigned char *pUTF8, wchar_t *pUCS)
{
int UCSlen = 0, i;
unsigned char *pTempUCS = NULL;
unsigned char *pTempUTF8 = NULL;
if(pUCS == NULL || pUTF8 == NULL)
return -1;
UCSlen = MultiByteToWideChar(CP_UTF8,0,(LPCSTR)pUTF8,-1,NULL,0);
UCSlen--;
pTempUCS = (unsigned char*)pUCS;
pTempUTF8 = pUTF8;
for(i = 0; i < UCSlen; i++)
{
if((*pTempUTF8) <= 0x7F) //1 byte
{
*(pTempUCS + 1) = 0x00;
*pTempUCS = *(pTempUTF8++);
pTempUCS += 2;
}
else if((*pTempUTF8) >= 0xC0 && (*pTempUTF8) <= 0xDF)//2 bytes
{
*(pTempUCS + 1) = ((*pTempUTF8) >> 2) & 0x07;
*pTempUCS = ((*pTempUTF8) << 6) | (*(pTempUTF8 + 1) & 0x3F);
pTempUTF8 += 2;
pTempUCS += 2;
}
else//3 bytes
{
*(pTempUCS + 1) = ((*pTempUTF8) << 4) | ((*(pTempUTF8 + 1) >> 2) & 0x0F);
pTempUTF8++;
*pTempUCS = ((*pTempUTF8) << 6) | (*(pTempUTF8+1) & 0x3F);
pTempUTF8 += 2;
pTempUCS += 2;
}
}
return UCSlen;
}
2. UNICODE - GB2312
void UnicodeToGB2312(char* pOut,wchar_t* uData,int nLen)
{
WideCharToMultiByte(CP_ACP,NULL,uData,nLen,pOut,sizeof(wchar_t)*nLen,NULL,NULL);
return;
}
완전한 예
wchar_t pUnicode[128]= {0};
char pGB2312[256]= {0};
int nUnicodeLen = UTF82UCS((unsigned char *)pUtf8,(wchar_t*)pUnicode);
UnicodeToGB2312((char*)&pGB2312,(wchar_t*)&pUnicode,nUnicodeLen);
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
언제가 아닌가프로그래밍 언어에서 null 참조가 수십억 달러의 실수라는 말을 이미 들었을 것입니다. Java의 유명하고 두려운 NullPointerException은 여러분이 알고 있거나 C의 분할 오류일 수 있습니다. 모든 상...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.