兼容性报错--调整字符集解决

错误

请添加图片描述

解决办法

切换字符集类型
请添加图片描述`

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值