我在记事本中输入"你好啊"三个字(不包含"),用ultraedit打开,转到16位查看界面
得到这三个字的16进制数据"O}YJ"然后我想把这些乱码转换位unicode编码,让他们正常显示,下面的我的代码:
char *buf="O}YJU";size_t cLen=strlen(buf);
size_t wLen=MultiByteToWideChar(CP_ACP,0,buf,cLen+1,NULL,0);
wchar_t *wcharSorc=new wchar_t[wLen+1];
MultiByteToWideChar(CP_ACP,0,buf,cLen+1,wcharSorc,wLen);
wcharSorc[wLen]=L'\0';CString str;
str.Format(L"%s",wcharSorc);
AfxMessageBox(str);
delete []wcharSorc;
但是没有成功,得到的还是乱码
我用的是vs2008,unicode编码
得到这三个字的16进制数据"O}YJ"然后我想把这些乱码转换位unicode编码,让他们正常显示,下面的我的代码:
char *buf="O}YJU";size_t cLen=strlen(buf);
size_t wLen=MultiByteToWideChar(CP_ACP,0,buf,cLen+1,NULL,0);
wchar_t *wcharSorc=new wchar_t[wLen+1];
MultiByteToWideChar(CP_ACP,0,buf,cLen+1,wcharSorc,wLen);
wcharSorc[wLen]=L'\0';CString str;
str.Format(L"%s",wcharSorc);
AfxMessageBox(str);
delete []wcharSorc;
但是没有成功,得到的还是乱码
我用的是vs2008,unicode编码
使用memcpy试试
WCHAR buf1[4] = {0x4f60,0x597d,0x554a,0}; // L"你好啊"
char buf2[7] = {0xc4,0xe3,0xba,0xc3,0xb0,0xa1,0}; // "你好啊"
"O}YJ" 本来已经是6个字符了再转的话怎么可能转成3个字符呢?
标蓝部分为Unicode 标识头
size_t wLen=cLen \ 2;
wchar_t *wcharSorc=new wchar_t[wLen+1];
memcpy(wcharSorc,buf,cLen);
wcharSorc[wLen]=L'\0'; CString str;
str.Format(L"%s",wcharSorc);
AfxMessageBox(str);
delete []wcharSorc;
注意:最好去掉前面两个字符
但是如果我用CFile这个类来访问我建立的文本,跳过开始的两个字节,然后用Read来读取后面的内容,得到的也是那些乱码,我怎么才能把这些乱码还原呢?