http://blog.csdn.net/serverxp/article/details/5538017
最近在做一套跨平台的短信收发开发程序,遇到了一个问题,那就是文字编码转换。在windowsg下的转换有库函数
MultiByteToWideChar WideCharToMultiByte,这二个,但是我要的是在linux机器下也可以正常使用,所以google了一天,发现了二个解决方案,一个是libiconv,一个就是ICU了,实际使用后,发现还是ICU更好用,下面是一个简单的例子。
- #include <unicode/ucnv.h>
- #ifdef _WIN32
- #pragma comment(lib, "icuuc.lib")
- #endif
- //返回0为成功,错误代码定义见后面
- int convert(const char * toConverterName,
- const char * fromConverterName,
- char * target,
- int32_t targetCapacity,
- const char * source,
- int32_t sourceLength)
- {
- UErrorCode error = U_ZERO_ERROR;
- ucnv_convert(toConverterName,fromConverterName,target, targetCapacity, source, sourceLength, &error );
- return error;
- }
- int _tmain(int argc, _TCHAR* argv[])
- {
- wchar_t aaa[] = L"中国人的系统上123323";
- int alen = wcslen(aaa);
- int blen=alen*2+sizeof(int);
- char *abuff=new char[blen];
- int result = convert( "gb2312", "utf-16le", abuff, blen, (const char *)aaa, alen);
- cout << abuff << endl<<strlen(abuff)<<endl;
- delete []abuff;
- return 0;
- }