字符编码学习笔记

来源:互联网 发布:淘宝网商城女鞋休闲鞋 编辑:程序博客网 时间:2024/05/21 07:58

1.编码方式(数字-------------------> 代表什么---------------> 显示为什么)
           编码(ascii,gbk,unicode)            字体文件(编码,点阵字体)
  所谓的编码,是用预先规定的方法将文字、数字或其他对象编程数码。
  ASCII码:用一个字节的低七位来表示英文字符、数字和其他一些符号。也就是
  说我们看到的这些字符、数字在计算机中都有对应的码值,例如字符'A'对应的
  ASCII码为0x41.在当时使用ASCII码就可以解决所有的字符集。
  国标码(GBK):对于内陆人使用的是汉字,采用的是国标码,使用两个字节来代表
  一个汉字。
 unicode编码:为了解决全世界统一的编码方式,采用了unicode编码,这个表给出
  这个表给出了某个数值与字符的关系;某个数字代码某个符号。而这个编码表是
  如何表示它呢?(比如说用3个字节表示一个unicode编码,这种方法显然是很浪费的)
  因此如何来表示unicode编码出现了多种方式:UTF-8 UTF-16
 
2.一个例子
 将含有abc字符的文件依次保存为ascii,utf-8,utf-16格式,然后用UE打开,查看
  其内容。<CTRL +H>
  ascii:  00000000:  6162 63 ;abc <使用一个字节进行编码>
  utf-8:  00000000:  EFBB BF 61 62 63 ;abc  <EF BB BF表示使用UTF-8方式来存储unicode编码> 
 utf-16-le: 00000000:  FF FE 61 0062 00 63 00 ;abc<使用两个字节来表示unicode编码>
 utf-16-be:   00000000:  FE FF 00 61 00 62 00 63 ;abc
 
  在以上文件中加上"中"
  ascii:  00000000:  6162 63 D6 D0 ;abc<使用一个字节进行编码,使用国标码>
  utf-8:  00000000:  EFBB BF 61 62 63 E4 B8 AD;abc  <EF BBBF 表示使用UTF-8方式来存储unicode编码> 
 utf-16-le: 00000000:  FF FE 61 0062 00 63 00 4E 2D;abc<使用两个字节来表示unicode编码,为unicode编码>
 utf-16-be:   00000000:  FE FF 00 61 00 62 00 63 2D 4E;abc
 
3.UTF-8是如何来表示unicode?
  中 : E4 B8 AD 11100100 10111000 10101101是一种变长的存储方式
  第一个字节的前n位为1,n+1位为0表示用n个字节来表示该字符的unicode编码
  后面的n-1个字节的前2位都为10,剩下的这些值用来表示该字符的unicode值
  由此可知"中"的unicode 0100111000101101
  UTF-8使用最普遍,其优点:
 变长存储
 具有容错性,即便出错也只会导致若干个乱码,如果是UTF-16,其中一个错误
 会导致整个文件遭到破坏。

4.一个现象的分析?
 当我们使用putc(char ch)从开发板的的串口发出一个字符'A',是如何在我们
 的windows终端显示出'A'来的?
 字符是以其ascii码进行存储的,因此通过串口线传输的实际上是字符'A'的
 ascii码0x41,而我们windows终端软件接收到这个ascii码时,如何显示是要
 通过查找存储在系统中的字体库文件,字体库文件中包括字符的码值和字符的
 字体点阵数据,通过查找字体文件最终将该码值对应的字体点整数据显示在屏幕
 上。
 如何得知一个字体文件中含有字体编码值?
 我们设置UE中某个文件的字体时,就会有字符集选择,字符集就是字符编码的
 方式:当我们设置字体为黑体时,字符集中就有CHINESE_GB2312

5.一个C源代码用不同的(编码方式)字符集保存,会导致执行结果不一致?
  这显然是不应该出现的,解决方法:编译程序时应该指定一些参数
  finput charset= charset表示源文件的编码方式,默认为UTF-8来解析
  fexec charset = charset表示可执行程序里的字符以什么方式来解析,默认为UTF-8

0 0
原创粉丝点击