vc 多字节 unicode 特殊字符问题ⓟ
我的工程是多字节的,在不改变工程字符集的前提下如何向文本框添加特殊字符ⓟ我的代码是这样的CStringstr;char*szAnsi="ⓟ";in...
我的工程是多字节的,在不改变工程字符集的前提下如何向文本框添加特殊字符ⓟ
我的代码是这样的
CString str;
char* szAnsi = "ⓟ";
int wcsLen = ::MultiByteToWideChar(CP_ACP, NULL, szAnsi, strlen(szAnsi), NULL, 0);
wchar_t* wszString = new wchar_t[wcsLen + 1];
::MultiByteToWideChar(CP_ACP, NULL, szAnsi, strlen(szAnsi), wszString, wcsLen);
wszString[wcsLen] = '\0';
str = wszString;
GetDlgItem(IDC_EDIT2)->SetWindowText(str);
结果显示内容是问号
要如何修改啊? 展开
我的代码是这样的
CString str;
char* szAnsi = "ⓟ";
int wcsLen = ::MultiByteToWideChar(CP_ACP, NULL, szAnsi, strlen(szAnsi), NULL, 0);
wchar_t* wszString = new wchar_t[wcsLen + 1];
::MultiByteToWideChar(CP_ACP, NULL, szAnsi, strlen(szAnsi), wszString, wcsLen);
wszString[wcsLen] = '\0';
str = wszString;
GetDlgItem(IDC_EDIT2)->SetWindowText(str);
结果显示内容是问号
要如何修改啊? 展开
1个回答
展开全部
CString的模式,由工程已经指定了。如果这个是必须的,那么最好使用UNICODE模式。
或者,你可以试试SetWindowTextW,并使用wchar做参数,而不是CString。
你这个ⓟ只能在超大字符集中出现,所以非UNICODE肯定不行,在UNICODE下,如果你是VC6那么只能放到资源字符串中,VS2005以上可以在代码中直接实现。
或者,你可以试试SetWindowTextW,并使用wchar做参数,而不是CString。
你这个ⓟ只能在超大字符集中出现,所以非UNICODE肯定不行,在UNICODE下,如果你是VC6那么只能放到资源字符串中,VS2005以上可以在代码中直接实现。
追问
我把多字节改为unicode
代码里面用到了strcpy
代码:
char name[32];
CStringArray varName;
strcpy(name,varName[adNum]);
出现错误:error C2664: “strcpy”: 不能将参数 2 从“CString”转换为“const char *”
请问如何修改比较合适?
追答
各种函数不要乱用。
如果是UNICODE模式,那么CString存放的是wchar字符串,如果希望存放到char数组,那么
CString str = varName[adNum];
TCHAR *tc = str.GetBuffer(0);//这就得到了宽字符指针
然后使用WideCharToMultiByte将tc转换为char数组即可。
来自:求助得到的回答
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询