windows中UNICODE编码有关问题

windows中UNICODE编码问题
windows内部使用UTF-16BE来表示字符。

当一个字符的UNICODE码小于0x10000时,用两个字节表示也就是一个wchar_t
如果UNICODE编码大于0x10000,就会使用4个字节表示,也就是两个wchar_t


现在问题是如果用CString存储一个字符用wcslen获取长度肯定会是1.

如果直接用 wchar_t *pwch = (wchar_t *)CString;


强制把CString转换成wchar_t,怎么才能获取转换后的长度(2字节,或者4字节?)

有一种方法是判断前两的值,如果在0xD800-0xDFFF范围内,则会是4字节的。

此外还有别的方法吗?



------解决方案--------------------
windows用utf16-le,CString俺不懂,就是因为分不清他什么时候存储unicode,什么时候存储ascii,所以俺在涉及这种情况时都使用TCHAR,对于utf32,都使用dword.

------解决方案--------------------
字符方面我也有点晕。
既然你转换成了指针,那就用求指针长度的函数来获取喽。也可以直接打印一下看看。==
------解决方案--------------------
说的是GB18030-2000 标准吧
C/C++ code
下列 Windows API 提供对GB18030-2000 的支持。IsValidCodePage(), GetCPInfo(), MultiByteToWideChar() and WideCharToMultiByte().
具体说明如下:
1) IsValidCodePage(54936) returns TRUE.
2) GetCPInfo(54936, lpCPInfo) returns TRUE.
3) MultiByteToWideChar(54936, 0, lpMultiByteStr, cbMultiByte, lpWideCharStr, cchWideChar) 完成GB18030-2000 字符串 lpMultiByteStr 到 Unicode 字符串 lpWideCharStr  的转换。
4) WideCharToMultiByte(54936, 0, lpWideCharStr, cchWideChar, lpMultiByteStr, cbMultiByte, lpDefaultChar, lpUsedDefaultChar) 完成Unicode 字符串 lpWideCharStr 到 GB18030-2000 字符串 lpMultiByteStr  的转换