int UbiAscIIToUnicode(char*pstr ,CString& str)
{
int nAnsiLen=strlen(pstr);
int nUniLen=MultiByteToWideChar(CP_ACP,MB_PRECOMPOSED,pstr,nAnsiLen,NULL,0);
LPWSTR pUnicode=(LPWSTR)LocalAlloc(LPTR,nUniLen);
int nRet=MultiByteToWideChar(CP_ACP,MB_PRECOMPOSED,pstr,nAnsiLen,pUnicode,nUniLen);
str=pUnicode;//error
return nRet;}
以上是我写的从ASCII转化为CString的函数
在 str=pUnicode;出错了
请高手指点一下正确的函数应该怎么写?谢谢
{
int nAnsiLen=strlen(pstr);
int nUniLen=MultiByteToWideChar(CP_ACP,MB_PRECOMPOSED,pstr,nAnsiLen,NULL,0);
LPWSTR pUnicode=(LPWSTR)LocalAlloc(LPTR,nUniLen);
int nRet=MultiByteToWideChar(CP_ACP,MB_PRECOMPOSED,pstr,nAnsiLen,pUnicode,nUniLen);
str=pUnicode;//error
return nRet;}
以上是我写的从ASCII转化为CString的函数
在 str=pUnicode;出错了
请高手指点一下正确的函数应该怎么写?谢谢
解决方案 »
- 问个弱智的问题,VC++ MFC如何声明数组全局变量
- 记录指针为什么无法移动啊??
- 再开一贴!!!有关内存泄露得问题,最终解决再加200分,感谢各位高手得鼎立指教!!
- 请教:在vc6中使用stl导致大量warning该如何处理??
- 怎么杀掉一个进程,抢分啦,100分全送
- 怎么给分???
- 小问题:如何知道一个popup对话框的类名?(解答正确立刻给分!)
- 我抱着试试看的态度:不知道这个问题是不是该在这问。相信应该有人知道。
- 创建成功了一个线程,但是我想调用对话框里的函数 总提示该函数未定义 求教!
- 有谁知道《程序员》杂志的邮刊代号
- 从'LPCTSTR' 到to 'const char []'
- error C2440: 'type cast'错误
LPWSTR pUnicode=(LPWSTR)LocalAlloc(LPTR,(nUniLen+1)*sizeof(WCHAR)); 执行完转换,因为是字符串,末尾要加'\0'
pUnicode[nRet]='\0';
然后要用CStringW来接收LPWSTR,CString不明确,可能出错
最后释放掉分配的内存LocalFree(pUnicode);
就是2楼说的这个问题,MultiByteToWideChar返回的是字符数,而不是字节数LPWSTR pUnicode = (LPWSTR)LocalAlloc(LPTR,(nUniLen + 1) * sizeof(WCHAR));
函数名:CString UTF8ToUnicode(char* UTF8code)
MultiByteToWideChar()第一个参数填CP_UTF8就是你要的函数。
char* szU8Buf="Notes-zhCN: 淇濆瓨瑙掕壊鑳屽寘涓庨摱琛屽唴鐗╁搧鐨勪俊鎭\xaf";
int nUTF8=strlen(szU8Buf);
int nWCHAR=MultiByteToWideChar(CP_UTF8,0,szU8Buf,nUTF8,NULL,0);
WCHAR* szUnicode=new WCHAR[nWCHAR+1];
MultiByteToWideChar(CP_UTF8,0,szU8Buf,nUTF8,szUnicode,nWCHAR);
szUnicode[nWCHAR]='\0';
CStringW u8;
u8=szUnicode;
delete[] szUnicode;
MessageBoxW(NULL,u8,u8,MB_OK);
FILE* file; wchar_t* name = L"Text.txt"; file = _wfopen(name,L"rb"); fseek(file,0,0); while(feof(file)) wchar_t buffw[100];fgetws(buffw,100,file); int len = WideCharToMultiByte(CP_ACP,0,buffw+1,wcslen(buffw+1),NULL,NULL,NULL,NULL); LPSTR lpsz = new char[len+1];WideCharToMultiByte(CP_ACP,0,buffw+1,wcslen(buffw+1),lpsz,len,NULL,NULL); lpsz[len] = '\0';
这个我写的 测试过了 没问题 希望对你能有些帮助
这里的Text.txt是Unicode的如果是ASC到Unicode转换 把wchar_t 换成 char
函数在换下 自己弄一下就能出来了
思路一样的