内容简介:今天学习一下编码,先回顾一下昨天的基础准备工作。下面进行了解UTF-8与UTF-16的二进制编码方式。为啥要了解这个,因为js中所有是string类型都是使用UTF-16编码的
前言
今天学习一下编码,先回顾一下昨天的基础准备工作。
下面进行了解UTF-8与UTF-16的二进制编码方式。
为啥要了解这个,因为js中所有是string类型都是使用UTF-16编码的
因此我们与后端进行通信时,需要转换成与之一致的编码。(后端或者前端转换)
UTF-8编码方式
注:
1. Unicode码范围 用十六进制表示 3. 8位二进制为一字节
Unicode码范围 | UTF-8编码方式 | 占用字节 |
---|---|---|
U+0000 ~ U+007F | 0xxxxxxx | 1 |
U+0080 ~ U+ 07FF | 110xxxxx 10xxxxxx | 2 |
U+0800 ~ U+FFFF | 1110xxxx 10xxxxxx 10xxxxxx | 3 |
U+10000 ~ U+10FFFF | 11110xxx 10xxxxxxx 10xxxxxx 10xxxxxx | 4 |
Unicode码转换UTF-8
U+4E00用十六进制表示 0x4E00 转换二进制,按位转换 4 = 0011 E = 14 = 1110 0 = 0000 0 = 0000 0x4E00 = 0100 1110 0000 0000 = 19968 0x0800< 0x4E00 < 0xFFFF 得出是三个字节。 UTF-8三字节的编码方式 从 0100 1110 0000 0000 变成 1110 xxxx 10 xxxxxx 10 xxxxxx格式 由从末位到首位进行顺位插入的方式 0100 111000 000000 1110 xxxx 10 xxxxxx 10 xxxxxx 1110 0100 10 111000 10 000000 其中利用js的按位操作符 符号操作符进行转换 先替换原码(从末位到首位)的第7位8位 第一字节 utf-8 3字节中的第一字节格式 为 10 xxxxxx所有截取6位(原码与编码对应的 为x的位值,要保持不变, 编码其中的x位值全部为原码) 先利用按位与的特性(全1为1 否则为0)进行截取原码的末6位 二进制 111111 = 63十进制 0100 1110 0000 0000 & 0000 0000 0011 1111 = 000000 19968 & 63 = 000000 UTF-8的第一字节格式为 10 xxxxxx所以利用按位或的特性(遇1为1,全0 为0)来变换UTF-8 3字节中的第一个字节的编码方式 将x替代为0 得出 10 000000 二进制 10 000000 = 128; 按位或 00 000000 | 10 000000 = 10 000000 0 | 128 = 128 第二个字节 UTF-8 3字节中的第二字节依然是10 xxxxxx格式,所以只需要从第6位开始进行截取6位 利用带符号右移操作符 a >> b 首位开始补 b 个 首位值 右侧舍去b个位 先舍去末6位 0100 1110 0000 0000 >> 6 = 000 000 0100 1110 00 19968 >> 6 = 312 利用按位与进行截取 000 000 0100 1110 00 & 111111 = 111 000 312 & 63 = 56 继续利用按位或进行变换 00 111000 | 10 000000 = 10 111000 56 | 128 = 184 第三字节 utf-8 3字节的第三字节编码方式为 1110 xxxx 所以只需要从第12开始截取4位 从末位第12位开始截取4位,利用带符号右移操作符 a >> b 首位开始补 b 个 首位值 右侧舍去b个位 0100 1110 0000 0000 >> 12 = 000 000 0000 0100 19968 >> 12 = 4 利用按位与进行截取 4位 二进制 1111 = 15 0100 & 1111 = 0100 4 & 15 = 4; 利用按位或进行变换 二进制 1110 0000 = 224 0000 0100 | 1110 0000 = 1110 0100 4 | 224 = 228 三个字节组合起来 228 184 128 = 1110 0100 1011 1000 1000 0000(二进制) = 14 4 11 8 8 0( 四位转一位十进制) =0xe4b880(十六进制) utf-16转utf-8 0x4E00 = 0xe4b880 python编码转换 b'\xe4\xb8\x80'.decode('utf-8') = "一"
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网
猜你喜欢:- webSocket 二进制传输基础准备-Unicode转UTF16
- webSocket 二进制传输基础准备-UTF-16和UTF-8转Unicode
- 二进制手表
- 二进制状态码
- Cocoapods 二进制
- 玩转前端二进制
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
迎接互联网的明天
邹静 / 电子工业 / 2011-6 / 55.00元
《迎接互联网的明天-玩转3D Web(附盘)》,全书共5章,第1章主要阐述了国内外空前繁荣的3D互联网技术领域,以及这些领域透射出来的潜在商机;第2章主要用当下比较流行的Flash编程语言ActionScript 3,来向大家介绍面向对象编程语言的思想概念,以及一些3D渲染技术的入门知识;第3章注重建模知识的运用,主要运用WireFusion和3ds Max来制作3D网页;第4章主要介绍3D游戏编......一起来看看 《迎接互联网的明天》 这本书的介绍吧!