1.ASCII
二进制和英文字母(也就是拉丁文)的对应表,标准 ASCII 编码共收录了 128 个字符,其中包含了 33 个控制字符(具有某些特殊功能但是无法显示的字符)和 95 个可显示字符。每个字符占用1个字节。而且只会用到较低的7位,有一位被空闲。
2.GBK
中文字符编码集,兼容ASCII编码,ASCII字符还是占用一位,汉字占用两位。
3.Unicode
统一码,万国码。是一个字符集
unicode有三种编码方式:
- UFT-8:一种变长的编码方案,使用 1~6 个字节来存储;
- UFT-32:一种固定长度的编码方案,不管字符编号大小,始终使用 4 个字节来存储;
- 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语言编码问题
- 窄字符使用ascii编码
- 宽字符,宽字符串使用 UTF-16或 UTF-32
- 窄字符串使用编码情况和操作系统和编译器有关,微软编译器使用本地编码,GCC、LLVM/Clang 使用和源文件编码相同的编码。中国来说使用GBK 或者 UTF-8 编码。