关于字符方式

1、单字节:ASSCII是一种单字节编码(英文和数字),最多容纳256个字符。但是要处理中文显然一个字节是不够的,至少需要两个字节,而且还不能和ASCII编码冲突,所以,中国制定了GB2312编码。

2、宽字节:宽字节就是在说unicode使用两个字节来表示一个符号。

3、多字节:就是在说ANSI、gb等。Unicode只是一个符号集,它只规定了符号的二进制代码,却没有规定这个二进制代码应该如何存储。

4、unicode是一种字符集,UTF-8等是它的不同实现方式,可以实现所有语言的表示。

UTF-8是一种变长的编码方式(中文英文数字)。它可以使用1~4个字节表示一个符号,根据不同的符号而变化字节长度。

Unicode符号范围        |   UTF-8编码方式
  (十六进制)                 |   (二进制)

我们在写c++程序时候,要注意字符、编码方式的不同,防止遍历目录等无法读取。如:

1)ANSI:文件的编码就是两个字节“D1 CF”,这正是“严”的GB2312编码,这也暗示GB2312是采用大头方式存储的。
2)Unicode:编码是四个字节“FF FE 25 4E”,其中“FF FE”表明是小头方式存储,真正的编码是4E25。
3)Unicode big endian:编码是四个字节“FE FF 4E 25”,其中“FE FF”表明是大头方式存储。
4)UTF-8:编码是六个字节“EF BB BF E4 B8 A5”,前三个字节“EF BB BF”表示这是UTF-8编码,后三个“E4B8A5”就是“严”的具体编码,它的存储顺序与编码顺序是一致的。UTF-8编码把一个Unicode字符根据不同的数字大小编码成1-6个字节,常用的英文字母被编码成1个字节,汉字通常是3个字节,只有很生僻的字符才会被编码成4-6个字节。如果你要传输的文本包含大量英文字符,用UTF-8编码就能节省空间

5)大量只支持ASCII编码的历史遗留软件可以在UTF-8编码下继续工作。

6)强调一下,unicode是一种编码方式,和ascii是同一个概念,而UTF-8,UTF-16等是一种存储方式,在存储和传输上节约空间、提高性能的一种编码形式。

7)计算机系统通用的字符编码工作方式:Unicode编码Unicode所有语言都统一到一套编码里,不会乱码,常用的是用两个字节表示一个字符(如果要用到非常偏僻的字符,就需要4个字节))

 当需要保存到硬盘或者需要传输的时候,就转换为UTF-8编码。比如用记事本编辑的时候,从文件读取的UTF-8字符被转换为Unicode字符到内存里,编辑完成后,保存的时候再把Unicode转换为UTF-8保存到文件。所以很多网页的源码上会有类似<meta charset="UTF-8" />的信息,表示该网页正是用的UTF-8编码。

乱七八糟的,按理解总结一次吧:

ASSCII:单字节,英文和数字

Unicode:宽字节(2 or 4),所有语言;

UTF-8:多字节(1~6),所有语言,英1,汉字3,生僻的4-6。

 

C标准:

头文件:#include <stdlib.h> 

宽字节转单字节size_t wcstombs( char *mbstr, const wchar_t *wcstr, size_t count );

单字节转宽字节size_t mbstowcs( wchar_t *wcstr, const char *mbstr, size_t count );

只能一个一个的转换,也就是说一次只能转换一个字符

 

微软的函数(VC):

头文件:#include <windows.h>

宽字节转多字节WideCharToMultiByte

多字节转宽字节MultiByteToWideChar 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值