zoukankan      html  css  js  c++  java
  • unicode 编码总结

    unicode简介:
      unicode又称为unicode character set,缩写为ucs,意为字符集。编码方式有utf-7,utf-8,utf-16,utf-32几种,常用的是utf-8和utf-16。utf-8常用于web中,utf-16是windows和java采用的编码方式。通常我们说unicode就是指utf-16。
    本文主要讲讲utf-16和utf-8。

    utf-16:
      utf-16同时也称为ucs-2编码,采用两个字节表示。最多可表示2^16=65536个符号。我们知道ascii码用一个字节即可表示全部的英文字母,因此对于英文而言,utf-16稍显浪费。

    utf-8:
      utf-8是一种变长unicode编码,用1至4个字节表示。对于英文而言,用一个字节表示即可,此时utf-8编码与ascii编码是一模一样的。

    utf-16 be和utf-16 le:
      be即big-endian,意味按高位到低位的顺序存储,那么le(little-endian)就是按低位到高位的顺序存储了。如果打开一个utf-16编码的文件最先出现的是feff,则表明是用be方式存储的。如果出现的是fffe则为le方式存储。

    bom:
      在utf-16 be中用16进制表示为feff,转换为二进制是11111110 11111111(左侧为高位,右侧为低位)。在utf-16 le中用16进制表现为fffe, 因此bom的存在就是为了区分文件是用be方式还是le方式存储的。
    在utf-8 be中bom用16进制表示为ef bb bf。

    unicode转化为utf-8:
      utf-8的编码规则很简单,只有二条:
    1)对于单字节的符号,字节的第一位设为0,后面7位为这个符号的ascii码。因此对于英语字母,utf-8编码和ascii码是相同的。
    2)对于n字节的符号(n>1),第一个字节的前n位都设为1,第n+1位设为0,后面字节的前两位一律设为10。剩下的没有提及的二进制位,全部为这个符号的unicode码。

    Unicode符号范围 | utf-8
    (十六进制) |(二进制)
    -------------------------+--------------------------------------
    0000 0000 - 0000 007F | 0xxxxxxx
    0000 0080 - 0000 07FF | 110xxxxx 10xxxxxx
    0000 0800 - 0000 FFFF | 1110xxxx 10xxxxxx 10xxxxxx
    0001 0000 - 0010 FFFF | 11110xxx 10xxxxxx 10xxxxxx 10xxxxxx

    找到unicode符号对应的utf-8区间,将unicode符号转换为二进制,最后一个二进制位开始,依次从后向前填入utf-8格式中的x,多出的位补0。

    示例:
    将utf-16 bom转换为utf-8 bom,即将0xfeff转换为utf-8 bom。

    一)unicode编码feff所在的范围为0000 0800 - 0000 FFFF,因此其utf-8模板为1110xxxx 10xxxxxx 10xxxxxx,占用3个字节。
    二)0x feff = 0b 1111 111011 111111,这里我是用python计算出来的,bin(0xfeff)
    三)从最后一个二进制位开始,依次将每位填入utf-8模板中,多出位补0,得11101111 10111011 10111111,转换为16进制为ef bb bf,用python计算hex(0b111011111011101110111111)可得

    参考文章:

    1.字符编码笔记:ASCII,Unicode和UTF-8 http://www.ruanyifeng.com/blog/2007/10/ascii_unicode_and_utf-8.html

    2.程序员趣味读物:谈谈Unicode编码 http://www.pconline.com.cn/pcedu/empolder/gj/other/0505/616631.html

  • 相关阅读:
    【Python3爬虫】一次应对JS反调试的记录
    【Python3爬虫】突破反爬之应对前端反调试手段
    学习CSS之如何改变CSS伪元素的样式
    学习CSS之用CSS实现时钟效果
    学习CSS之用CSS绘制一些基本图形
    【Python3爬虫】一次破解JS加密数据的记录
    Linux安装部署Redis(超级详细)
    Linux部署MongoDB
    使用Nginx对.NetCore站点进行反向代理
    Linux部署.NetCore站点 使用Supervisor进行托管部署
  • 原文地址:https://www.cnblogs.com/tudas/p/brief-intro-to-unicode.html
Copyright © 2011-2022 走看看