MultiByteToWideChar 与 WideCharToMultiByte 准确理解

本文详细阐述了多字节编码(如Ansi、UTF8)与Unicode编码的区别,特别强调了UTF8的不定长存储特性,并通过实例解释了在API调用中如何正确指定源字符串的编码类型。此外,文章还澄清了ANSI和UTF8在存储英文和中文字符时的不同方式,以及它们与Unicode(宽字节)编码的理解区别。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

记得之前已经写过有关两个API用法的文章,知道是知道含义,但是有些关键点没有把握到:


(1)多字节也有许多编码格式,其中包括Ansi和UTF8,这里容易混淆的地方是:UTF8与UNICODE,UTF是多字节集不是UNICODE

(2)UTF8为不定长存储,也就是说他存储的长度是不确定的,如:

占2个字节的:〇
占3个字节的:基本等同于GBK,含21000多个汉字
占4个字节的:中日韩超大字符集里面的汉字,有5万多个

(3)UNICODE中,英文和中文都是占用两个字节长度

(4)Ansi中英文字节长度又不同,如英文一个字节,中文则是两个字节;如:

// ANSI 字符串,内容长度 7 字节
char
     sz[20] = "中文123";


一句话就是,Ansi和UTF8都是多字节存储的一种方式,Ansi英文一个字节中文2个字节,UTF8一个英文占用一个字节,中文占用n个不定长字节,Unicode(宽字节)则是中英文都占用2字节;!!


另外,关于API第一个参数理解,MSDN说的很模糊不容易理解,并且感觉不太正确,有歧义,特此解释如下:

MultiByteToWideChar 

(1)第一个参数标志将要转化的源字符串的编码格式,也就是说该多字节是什么类型的多字节(多字节是那种编码格式),如果多字节的编码格式为Ansi则CP_ACP,如果为UTF8编码,则为CP_UTF8;


关键点还是,多字节集与Unicode宽字节编码的理解;


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

贝壳里的沙

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值