1.mbstowcs(b,a,2)的第3个参数是字符数而不是字节数。
所以把char 转为wchar_t时,而且char中不止有英文时,不能使用strlen,而要用_mbslen算字符数。
有时怎么转都乱码,需要setlocale( LC_ALL, "chs" );才能转成中文。
TCHAR.H routine | _UNICODE & _MBCS not defined | _MBCS defined | _UNICODE defined |
---|---|---|---|
_tcslen |
strlen |
strlen |
wcslen |
_tcsclen |
strlen |
_mbslen |
wcslen |
_tcsclen_l |
strlen_l |
_mbslen_l |
wcslen_l |
2.MultiByteToWideChar(CP_ACP,0,a,6,b,256); 注意,这个的第4个参数是字节数而不是字符数,如果是null结尾的可以写成-1。有些用上面那个需要setlocale的,这个不setlocale也能自动转换。
有的朋友可能已经发现,在标准的WinCE4.2或WinCE5.0 SDK模拟器下,这个函数都无法正常工作,其转换之后的字符全是乱码.及时更改MultiByteToWideChar()参数也依然如此.
不过这个不是代码问题,其结症在于所定制的操作系统.如果我们定制的操作系统默认语言不是中文,也会出现这种情况.由于标准的SDK默认语言为英文,所以肯定会出现这个问题.而这个问题的解决,不能在简单地更改控制面板的"区域选项"的"默认语言",而是要在系统定制的时候,选择默认语言为"中文".
系统定制时选择默认语言的位置于:
Platform -> Setting... -> locale -> default language ,选择"中文",然后编译即可.
3.CStringW有接收char的mbs的构造函数,可以直接构造成unicode。