文章目录
- 错误
- 解决办法
- Unicode 字符集(两个字节来表示一个字符)
- 多字节字符集(一个字节来表示一个字符)
- 如何选择字符集
- char与wchar_t的区别
- LPCSTR与LPCWSTR的区别
错误
解决办法
切换字符集类型
`
Unicode 字符集(两个字节来表示一个字符)
优点:
支持更多的字符集和语言。
可以避免一些字符编码相关的问题。
在 Windows API 中使用 Unicode 版本的函数,可以避免一些兼容性问题
缺点:
占用的存储空间更多。因为 Unicode 字符集需要使用两个字节来表示一个字符,所以字符串的存储空间会比多字节字符集大一倍。
一些旧的程序可能不支持 Unicode 字符集,需要进行兼容性处理。
多字节字符集(一个字节来表示一个字符)
优点:
占用的存储空间更少。因为多字节字符集只需要使用一个字节来表示一个字符,所以字符串的存储空间会比 Unicode 字符集小一半。
可以与一些旧的程序进行兼容,避免一些兼容性问题。
缺点:
不支持一些语言和字符集。例如,中文、日文、韩文等需要使用 Unicode 字符集才能正确表示。
可能会出现字符编码相关的问题。例如,在使用 Windows API 函数时,需要根据函数名称后缀来确定函数参数的类型。
如何选择字符集
判断Windows API函数参数有字符串时使用的多字节字符集还是宽字符字符集。
要理解字节字符集还是宽字符(UNICODE)字符集的区别,首先先理解char与wchar_t的区别:
char与wchar_t的区别
char叫多字节字符,一个char占一个字节,之所以叫多字节字符是因为它表示一个字符时可能是一个字节也可能是多个字节。一个英文字符(如’s’)用一个char(一个字节)表示,一个中文汉字(如’我’)用2个char(两个字节)表示。
wchar_t被称为宽字符,一个wchar_t占2个字节。之所以叫宽字符是因为所有的字都要用两个字节(即一个wchar_t)来表示,不管是英文还是中文。用常量给wchar_t赋值是,需要在常量前面加L。
LPCSTR与LPCWSTR的区别
LPCSTR的定义如下
typedef __nullterminated CONST CHAR *LPCSTR, *PCSTR;
typedef char CHAR;
LPCWSTR的定义如下
typedef __nullterminated CONST WCHAR *LPCWSTR, *PCWSTR;
typedef wchar_t WCHAR; // wc, 16-bit UNICODE character
大佬的写的很详细,有兴趣的可以去看一看
(借鉴原文)https://blog.csdn.net/huashuolin001/article/details/95620424