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 标准吧
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 的转换