编码问题

1.ASCII

二进制和英文字母(也就是拉丁文)的对应表,标准 ASCII 编码共收录了 128 个字符,其中包含了 33 个控制字符(具有某些特殊功能但是无法显示的字符)和 95 个可显示字符。每个字符占用1个字节。而且只会用到较低的7位,有一位被空闲。

2.GBK

中文字符编码集,兼容ASCII编码,ASCII字符还是占用一位,汉字占用两位。

3.Unicode

统一码,万国码。是一个字符集

unicode有三种编码方式:

  1. UFT-8:一种变长的编码方案,使用 1~6 个字节来存储;
  2. UFT-32:一种固定长度的编码方案,不管字符编号大小,始终使用 4 个字节来存储;
  3. UTF-16:介于 UTF-8 和 UTF-32 之间,使用 2 个或者 4 个字节来存储,长度既固定又可变。

只有 UTF-8 兼容 ASCII,UTF-32 和 UTF-16 都不兼容 ASCII,因为它们没有单字节编码。

 

4.c语言中的宽窄字符

c语言在处理英文字符时使用ascii编码,占用一个字节,称为窄字符。char a = 'A'

处理中文等其他语言的字符时使用UTF-16 或UTF-32编码,占用两个或四个字节 ,字符类型是wchar_t w是wide,t是type

wchar_t b = L'中'

注:字节定义使用单引号

详细查看:http://c.biancheng.net/cpp/html/3424.html

 

5.c语言编码问题

  1. 窄字符使用ascii编码
  2. 宽字符,宽字符串使用 UTF-16或 UTF-32
  3. 窄字符串使用编码情况和操作系统和编译器有关,微软编译器使用本地编码,GCC、LLVM/Clang 使用和源文件编码相同的编码。中国来说使用GBK 或者 UTF-8 编码。

 

posted @ 2019-07-28 20:56  克里夫妇  阅读(168)  评论(0编辑  收藏  举报