23,217
社区成员




#include <iostream>
#include "iconv.h"
#include <errno.h>
#include <stdio.h>
#include <iostream>
#include <string.h>
using namespace std;
int UTF8ToUnicode(const char *strUTF8,wchar_t **strUnicode) //UTF8 to Unicode
{
//UTF-8 to UTF-16
iconv_t conveter = iconv_open("UTF-16","UTF-8");
size_t inBytes=strlen(strUTF8) * sizeof(char);
size_t outBytes=strlen(strUTF8) * sizeof(wchar_t);
*strUnicode =new wchar_t[outBytes + 1];
wmemset(*strUnicode,0,outBytes + 1);
const char* strUTF8_tmp = strUTF8;
char* strUnicode_tmp= (char*)*strUnicode;
size_t rc=iconv(conveter,(const char**) &strUTF8_tmp, &inBytes, &strUnicode_tmp, &outBytes);
iconv_close(conveter);
if(rc == size_t(0))
{
return 1;
}
else
{
return -1;
}
}
int UnicodeToUTF8(const wchar_t *strUnicode, char **strUTF8) //Unicode To UTF8
{
//UTF-16 to UTF-8
iconv_t conveter = iconv_open("UTF-8","UTF-16");
size_t inBytes=wcslen(strUnicode) * sizeof(wchar_t);
size_t outBytes=wcslen(strUnicode) * 4;
*strUTF8 =new char[outBytes + 1];
memset(*strUTF8,0,outBytes + 1);
const char* strUnicode_tmp= (char*)strUnicode;
char* strUTF8_tmp = *strUTF8;
size_t rc=iconv(conveter,(const char**) &strUnicode_tmp, &inBytes, &strUTF8_tmp, &outBytes);
iconv_close(conveter);
if(rc == size_t(0))
{
return 1;
}
else
{
return -1;
}
}
int UTF8ToASCII(const char *strUTF8, char **strASCII) //UTF8 To ASCII
{
size_t inBytes=strlen(strUTF8) * sizeof(char);
size_t outBytes=1024;
*strASCII =new char[outBytes + 1];
memset(*strASCII,0,outBytes + 1);
const char* strUTF8_tmp = strUTF8;
char* strASCII_tmp= *strASCII;
char* gbChar = new char[outBytes + 1];
char* gbChar_tmp = gbChar;
iconv_t conveter = iconv_open("gb2312","UTF-8");
size_t rc=iconv(conveter,(const char**) &strUTF8_tmp, &inBytes, &gbChar_tmp, &outBytes);
conveter = iconv_open("ASCII","gb2312");
gbChar_tmp = gbChar;
rc=iconv(conveter,(const char**) &gbChar_tmp, &outBytes, &strASCII_tmp, &outBytes);
iconv_close(conveter);
if(rc == size_t(0))
{
return 1;
}
else
{
return -1;
}
}
int main()
{
char* utf8Char = "hello world 你好";
wchar_t *utf16Char = NULL;
char* asciiChar = NULL;
UTF8ToUnicode(utf8Char,&utf16Char);
UTF8ToASCII(utf8Char,&asciiChar);
return 0;
}