zoukankan      html  css  js  c++  java
  • [转]UTF8编码的初步认识

    在网络中有很多地方都有采用UTF8编码,由于要编写与邮件服务端有关的程序,而邮件服务端有些地方用到了UTF8编码,所以对它有了初步的认识!

    它其实和Unicode是同类,就是在编码方式上不同!
    首先UTF8编码后的大小是不一定,不像Unicode编码后的大小是一样的!

    我们先来看Unicode的编码:一个英文字母 “a” 和 一个汉字 “好”,编码后都是占用的空间大小是一样的,都是两个字节!

    而UTF8编码:一个英文字母“a” 和 一个汉字 “好”,编码后占用的空间大小就不样了,前者是一个字节,后者是三个字节!

    现在就让我们来看看UTF8编码的原理吧:
      因为一个字母还有一些键盘上的符号加起来只用二进制七位就可以表示出来,而一个字节就是八位,所以UTF8就用一个字节来表式字母和一些键盘上的符号。然而当我们拿到被编码后的一个字节后怎么知道它的组成?它有可能是英文字母的一个字节,也有可能是汉字的三个字节中的一个字节!所以,UTF8是有标志位的!

      当要表示的内容是 7位 的时候就用一个字节:0*******   第一个0为标志位,剩下的空间正好可以表示ASCII 0-127 的内容。

      当要表示的内容在 8 到 11 位的时候就用两个字节:110***** 10******   第一个字节的110和第二个字节的10为标志位。

      当要表示的内容在 12 到 16 位的时候就用三个字节:1110***** 10****** 10******    和上面一样,第一个字节的1110和第二、三个字节的10都是标志位,剩下的空间正好可以表示汉字。

      以此类推:
            四个字节:11110**** 10****** 10****** 10******
      五个字节:111110*** 10****** 10****** 10****** 10****** 
      六个字节:1111110** 10****** 10****** 10****** 10****** 10****** 
      .............................................
           ..............................................

    明白了没有?
    编码的方法是从低位到高位

    现在就让我们来看看实例吧!

     黄色为标志位
    其它着色为了显示其,编码后的位置

    Unicode十六进制

    Unicode二进制

    UTF8二进制

    UTF8十六进制

    UTF8字节数

    B

    00001011

    00001010

    B

    1

    9D

    00010011101

    11000010 10011101

    C2 9D

    2

    A89E

    10101000 10011110

    11101010 10100010 10011110

    EA A2 9E

    3


     一般在UTF8中,ASCII字符集用1Byte长度来表示,即上表中的第1行;西欧字符集用2Byte长度来表示,即上表中的第2行;ASCII字符集用3Byte长度来表示,即上表中的第3行;

  • 相关阅读:
    C语言-typedef和#define
    C语言-指针
    C语言-数据结构-结构体
    数据结构笔记
    树的存储结构
    树的基本知识
    关于矩阵
    LaTex
    札记-碎碎念
    一个大神的个人博客 博客桌面风格很棒 二次元
  • 原文地址:https://www.cnblogs.com/yayagamer/p/1800250.html
Copyright © 2011-2022 走看看