1、编码表
数字–>代表什么(编码表)–>显示什么(字体数据)
【字体文件里有编码表(需要找到那个字),字体数据(需要显示出来)】
外国人–> ASCII
中国内地–>GBK 国标码 GB国标K扩展
港澳台–> BIG5
世界统一–>Unicode
Unicode只是一个符号集,它只规定符号的二进制代码,没有规定二进制该如何存储 (任何一种编码都兼容ASCII)
假如三字节 0x00 0x00 0x61 表示A Unicode码存储英文很浪费
于是Unicode就有UTF-8,UTF-16LE(小端),UTF-16BE(大端) 三种存储方式
GBK
英文字符1个字节,中文字符2个字节
UFT-8 0xEF 0xBB 0xBF代表是utf-8的编码
UTF-8是一种变长的编码方式,它可以使用1~4个字节表示一个符号
以中字为例:
UTF-16le 0xFF 0xFE 代表utf-16小端Little-endian
存英文很浪费
UTF-16be 0xFE 0xFF 代表utf-16大端Big-endian
存英文很浪费
BIG5编码表
http://wenku.baidu.com/view/9bb3ae01b52acfc789ebc970.html
UNICODE编码表
http://wenku.baidu.com/view/7c667f563c1ec5da50e27069.html
GB2312简体中文编码表
http://wenku.baidu.com/view/0ef57bfb04a1b0717fd5dd1a.html
2、编译程序指定字符集
源文件用不同的编码方式编写,会导致执行结果不一样。
怎么解决?
编译程序时,指定字符集:
man gcc
搜索 /charset
-finput-charset=charset 表示源文件的编码方式,默认以UTF-8来解析
-fexec-charset=charset 表示可执行程序里的字节以什么编码方式来表示