c++11实现
将char*的中文字符转为wchar_t*的字符,使用c++ 11的新特性
智能指针,无需使用delete回收内存;
需要准备的头文件:string、wchar.h、locale.h
使用c的函数库mbstowcs(wchar_t* dst, const char* src, std::size_t len);
int toWchar(char *&src, wchar_t *&dest, const char *locale = "zh_CN.utf8") {
if (src == NULL) {
dest = NULL;
return 0;
}
//根据环境变量设置locale
setlocale(LC_CTYPE, locale);
int w_size = mbstowcs(NULL, src, 0) + 1;
//w_size=0说明mbstowcs返回值为-1。即在运行过程中遇到了非法字符(很有可能使locale没有设置正确)
if (w_size == 0) {
dest = NULL;
return -1;
}
dest = auto_ptr<wchar_t >(new wchar_t [w_size]).get();
if (!dest)
return -1;
int ret = mbstowcs(dest, src, MB_CUR_MAX);
if (ret <= 0)
return -1;
return ret;
}