只包含中英文的UTF-8與Unicode的轉換(不支援其它語言)
阿新 • • 發佈:2019-01-28
1.UTF8轉Unicode
// 把UTF-8轉換成Unicode void UTF_8ToUnicode(char *pIn,TCHAR* pOut) { char* uchar = (char *)pOut; uchar[1] = ((pIn[0] & 0x0F) << 4) + ((pIn[1] >> 2) & 0x0F); uchar[0] = ((pIn[1] & 0x03) << 6) + (pIn[2] & 0x3F); return; } void UTF8_UNICODE(char *lpIn, int nLen, TCHAR *lpOut) { int i = 0; int j = 0; while( i < nLen ) { WCHAR unicode = 0; if( lpIn[i] > 0 ) { *((char *)&unicode) = lpIn[i++]; } else { UTF_8ToUnicode(lpIn + i,&unicode); i += 3; } lpOut[j++] = unicode; } lpOut[j] = L'/0'; }
2.Unicode轉UTF-8
void UnicodeToUTF_8(TCHAR* pIn,char*pOut) { char* pchar = (char *)pIn; pOut[0] = (0xE0 | ((pchar[1] & 0xF0) >> 4)); pOut[1] = (0x80 | ((pchar[1] & 0x0F) << 2)) + ((pchar[0] & 0xC0) >> 6); pOut[2] = (0x80 | (pchar[0] & 0x3F)); } void UNICODE_UTF8(TCHAR* lpIn,int nLen,char* lpOut) { int i = 0; int j = 0; while(i < nLen) { if(*(lpIn+i)>127) { UnicodeToUTF_8(lpIn + i,lpOut + j); j+=3; } else { *(lpOut+j) = (char)*(lpIn+i); j++; } i++; } lpOut[j+1] = 0; }