• 忘掉天地
  • 仿佛也想不起自己
bingliaolongBingliaolong  2020-11-10 03:57 Aet 隐藏边栏 |   抢沙发  31 
文章评分 1 次,平均分 5.0

多字节

指用多个字节来表示一个字符的字符编码集合。一般英文字母用1Byte,汉语等用2Byte来表示。

发展

一开始

internet上只有一种字符集,ANSIASCII字符集,它使用7 bits表示一个字符,总共能表示128个字符,这些字符里包括了英文字母,数字,标点符号等常用字符。

后来

ASCII不够用了,因为除了那些常用字符,还有不同国家不同地区各自使用的字符,为了满足这种需求,衍生出了GB2312,BIG5,JIS等各国家地区各自编写的诸多编码标准。

这些标准使用2个字节表示一个字符的各种汉字延伸的编码方式,称为ANSI编码,又称多字节字符集。

但是呢,这些不同的ANSI字符集之间互不兼容,同一个编码值,可能在不同的编码体系中代表着不同的字。也就是说无法将不同语言的文字,储存在同一段ANSI编码的文本中。

再后来

为了解决上述问题,unicode就诞生了。
unicode通常用两个字节表示一个字符,也就是他这种标准可以存65535个字符,那这样对于全世界的文字符号来说,是够用的。但是呢,也有新的问题产生,那就是,像那些原有的英文字符,虽然把对应的高位全部填为0就可以了。但是实质上这种方式的效率是不高的,比如英文字母本来是单字节就可以表示的,现在却变成了双字节了。

为了解决这种效率问题,UTF-8就出现了。
它之所以解决了上面讲的问题,是因为它可以根据不同的符号自动选择编码的长短。比如英文字母,它只用一个字节就够了。

宽字节

一般指unicode编码的字符集

UTF

char,char16_t,char32_t分别表示无符号8位整数,无符号16位整数,无符号32位整数。
UTF-8,UTF-16,UTF-32则分别以char,char16_t,char32_t作为编码单位。

如:汉字

  • UTF-8
    • 3个字节
  • UTF-16
    • 2个char16_t,共4个字节
  • UTF-32
    • 2个char32_t,共8个字节

函数

多字节-宽字节

Value Describe
CP_ACP ANSI code page
CP_MACCP Not supported
CP_OEMCP OEM code page
CP_SYMBOL Not supported
CP_THREAD_ACP Not supported
CP_UTF7 UTF-7 code page
CP_UTF8 UTF-8 code page
MB_PRECOMPOSED 通常使用预作字符
MB_COMPOSITE 通常使用组合字符
MB_ERR_INVALID_CHARS 如果函数遇到无效的输入字符,它将运行失败,且GetLastErro返回ERROR_NO_UNICODE_TRANSLATION值
MB_USEGLYPHCHARS 使用象形文字替代控制字符
  • 指向待转换的字符串的缓冲区
  • 指定由参数lpMultiByteStr指向的字符串中字节的个数。可以设置为-1,会自动判断lpMultiByteStr指定的字符串的长度
  • 指向接收被转换字符串的缓冲区
  • 指定由参数lpWideCharStr指向的缓冲区的宽字节数。若此值为0,函数不会执行转换,而是返回目标缓存lpWideChatStr所需的宽字符数

宽字节-多字节

lpDefaultChar和pfUsedDefaultChar

只有当WideCharToMultiByte函数遇到一个宽字节字符,而该字符在uCodePage参数标识的代码页中并没有它的表示法时,WideCharToMultiByte函数才使用这两个参数。(通常都取值为NULL)

本文为原创文章,版权归所有,欢迎分享本文,转载请保留出处!

bingliaolong
Bingliaolong 关注:0    粉丝:0 最后编辑于:2023-12-04
Everything will be better.

发表评论

表情 格式 链接 私密 签到
扫一扫二维码分享