嵌入式Linux_Framebuffer_02字符编码

本文深入探讨了字符编码的不同类型,包括ASCII、ANSI、Unicode以及它们的变种UTF-16和UTF-8。ASCII是基本的7位编码,ANSI是对ASCII的扩展,根据地区使用不同的编码方式。Unicode为了解决ANSI的地区差异问题,提供了一种全球统一的字符编码标准。UTF-8作为变长编码,既节省空间又能处理ASCII和非ASCII字符,其安全性高于UTF-16。
摘要由CSDN通过智能技术生成

文本文件保存的是字符的编码值,在字符显示的时候字符显示的样子是由字体所决定的.

ASCII编码

ASCII编码是用一个字节的低7位来表示128个数值,在ASCII码中最高位永远是0.
ASCII编码百度百科

ANSI编码

ANSI是ASCII的扩展,向下兼容ASCII.对于ASCII字符仍用ASCII来表示,对于非ASCII字符则使用2字节来表示.ANSI并不是特定的一种字符编码,它与本地化(local)密切相关,在windows平台上,不同地区的ANSI编码代表不同的字符编码.例如中国台湾的ANSI实际是GB2312,中国台湾的ANSI实际是BIG5编码,等待即不同地区的ANSI对应不同的字符编码方式.
ANSI编码介绍

unicode编码

unicode编码就是为解决ANSI编码在不同地区编码方式不同的问题.unicode编码中任意一个字符都有一个唯一的编码与之对应.
unicode编码向下兼容ASCII,且unicode编码的编码有效范围是0x0000-0x10ffff.unicode编码可以表示100万个字符,足够使用.

unicode编码实现

由于unicode使用3个字节来表示字符编码.但是对于ASCII这些仅使用1个字节就可以表示的字符直接使用3个字节来表示就太浪费空间了,所以unicode编码又有如下的编码方式.在介绍unicode的实际采用的编码时先了解下字节序:

  • 大端字节序:数据的高字节保存在内存的低地址中,而数据的低字节保存在内存的高地址 0x1234的大端存储:0x3412.较为通俗的表示:数值权重低(0x12)的字节放在后面
  • 小端字节序:数据的高字节保存在内存的高地址中,而数据的低字节保存在内存的低地址 0x1234的小端存储:0x1234.较为通俗的表示:数值权重低(0x12)的字节放在前面
    每个unicode使用3个字节表示,太浪费空间,而使用2个字节来表示的话基本上所有常用字符都可以表示.以下两种编码方式就是使用2个字节来表示常用字符的编码方式.

UTF-16-LE

每个字符使用2个字节表示,使用小端方式存储

UTF-16-BE

每个字符使用2个字节表示,使用大端方式存储

UTF-8编码

UTF-16的两种编码方式都是用2个字节来表示字符,但是这种编码方式有如下几个缺点:

  • 表示的字符数量有限
  • 对于ASCII字符又有空间浪费的情况出现
  • 如果文件中出现某个字节丢失,会使此字符后的所有字符都因为错位而无法正常显示.
    UTF-8编码是变长的编码方式.另外UTF-8编码也有两种格式:
  • UTF-8 不带BOM:即文件中的所有数据都是使用utf8编码的字符数据
  • UTF-8 带BOM:文件有一个起始头部:0xefbbbf,来表示此文件是utf8编码的,后续数据都是使用utf8编码的字符数据.
UTF-8的编码方式
  • ASCII字符:直接使用ASCII码来表示

  • 非ASCII字符:使用变长编码:每一个字节的高位都自带长度信息.如下图:
    在这里插入图片描述

    • 0xe4[1110 0100]:高位1110中前两位表示此字节起有3个字符参与unicode编码.后面的10表示这是这个字节内utf8字符编码的起始位,即1110 0100 中仅0100是有效数据.
    • 0xb8[1011 1000]:由于0xe4已经确定是3个字节,这是第2个字节.前导的10表示这是这个字节内utf8字符编码的起始位,即仅11 1000是有效数据.
    • 0xad[1010 1101]:由于0xe4已经确定是3个字节,这是第3个字节.前导的10表示这是这个字节内utf8字符编码的起始位,即仅10 1101是有效数据

最终的有效数据就是0100111000101101–>0x4e2d

从上面的分析可以看出,由于非ASCII字符的编码都是带有长度信息的,如果其中某个非ASCII字符出错,仅仅只影响这一个字符,后面的字符并不受影响.比UTF-16要更加安全可靠.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值