存储单位

数据存储是以“字节”(Byte)为单位,数据传输大多是以“位”(bit,又名“比特”)为单位,一个位就代表一个0或1(即二进制),每8个位(bit,简写为b)组成一个字节(Byte,简写为B),是最小数据存储单位。

1B = 8bit

1KB = 1024B = 8192bit

1MB = 1024KB = 1048576B = 8388608bit

1GB = 1024MB = 1048576KB = 1073741824B = 8589934592bit

1TB = 1024GB = 1048576MB = 1073741824KB = 1099511627776B = 8796093022208bit

字符编码

1.ASCII 码

我们知道,计算机内部,所有信息最终都是一个二进制值。每一个二进制位(bit)有0和1两种状态,因此八个二进制位就可以组合出256种状态,这被称为一个字节(byte)。也就是说,一个字节一共可以用来表示256种不同的状态,每一个状态对应一个符号,就是256个符号,从00000000到11111111。上个世纪60年代,美国制定了一套字符编码,对英语字符与二进制位之间的关系,做了统一规定。这被称为 ASCII 码,一直沿用至今。

ASCII 码一共规定了128个字符的编码,比如空格SPACE是32(二进制00100000),大写的字母A是65(二进制01000001)。这128个符号(包括32个不能打印出来的控制符号),只占用了一个字节的后面7位,最前面的一位统一规定为0。

2.Unicode

英语用128个符号编码就够了,但是用来表示其他语言,128个符号是不够的。比如,在法语中,字母上方有注音符号,它就无法用 ASCII 码表示。于是,一些欧洲国家就决定,利用字节中闲置的最高位编入新的符号。比如,法语中的é的编码为130(二进制10000010)。这样一来,这些欧洲国家使用的编码体系,可以表示最多256个符号。但是,这里又出现了新的问题。不同的国家有不同的字母,因此,哪怕它们都使用256个符号的编码方式,代表的字母却不一样。

可以想象,如果有一种编码,将世界上所有的符号都纳入其中。每一个符号都给予一个独一无二的编码,那么乱码问题就会消失。这就是 Unicode,就像它的名字都表示的,这是一种所有符号的编码。

3.UTF-8

Unicode 只是一个符号集,它只规定了符号的二进制代码,却没有规定这个二进制代码应该如何存储。UTF-8 就是在互联网上使用最广的一种 Unicode 的实现方式。其他实现方式还包括 UTF-16(字符用两个字节或四个字节表示)和 UTF-32(字符用四个字节表示),不过在互联网上基本不用。

Runes

Runes 对象是一个 32位 字符对象,用来表示一个字。这样设计也是考虑兼容 UTF-16 四个字节的情况。

String a = '?';
print(a.length);
print(a.runes.length);>> 输出
2 // 标识占 2 个 16 位字符
1 // 表示占 1 个 32 位字符

runes 是一个 32 位字符对象

操作 32-bit Unicode 字符

Runes b = new Runes('\u{1f596} \u6211');
var c = String.fromCharCodes(b);或者String c = '\u{1f596} \u6211'

如果非4个数值,需要用 {…}

返回 16-bit code units 的 codeUnitAt codeUnits

var a = '?';
print(a.codeUnitAt(0));
print(a.codeUnits);>> 输出
55357           // 第 1 位的 10 进制数值
[55357, 56442]  // 显示 2 位的 10 进制数值

返回 32-bit Unicode 的 runes

var a = '?';
print(a.runes);>> 输出(128122) // 显示 32 位的 10 进制数值

String 操作整理

名称 说明
codeUnitAt 某个字符的码 10进制
fromCharCodes Runes 转 String 工厂函数
runes 返回字对象

Dart笔记(10):Runes相关推荐

  1. Dart基础语言 — Runes

    Dart基础语言 - Runes Runes Runes 对象是一个 32位 字符对象,用来表示一个字. 这样设计也是考虑兼容 UTF-16 四个字节的情况. length 和 runes.lengt ...

  2. thinkphp学习笔记10—看不懂的路由规则

    原文:thinkphp学习笔记10-看不懂的路由规则 路由这部分貌似在实际工作中没有怎么设计过,只是在用默认的设置,在手册里面看到部分,艰涩难懂. 1.路由定义 要使用路由功能需要支持PATH_INF ...

  3. SpringMVC:学习笔记(10)——整合Ckeditor且实现图片上传

    SpringMVC:学习笔记(10)--整合Ckeditor且实现图片上传 配置CKEDITOR 精简文件 解压之后可以看到ckeditor/lang下面有很多语言的js,如果不需要那么多种语言的,可 ...

  4. springmvc学习笔记(10)-springmvc注解开发之商品改动功能

    springmvc学习笔记(10)-springmvc注解开发之商品改动功能 springmvc学习笔记(10)-springmvc注解开发之商品改动功能 标签: springmvc springmv ...

  5. Python 网络爬虫笔记10 -- Scrapy 使用入门

    Python 网络爬虫笔记10 – Scrapy 使用入门 Python 网络爬虫系列笔记是笔者在学习嵩天老师的<Python网络爬虫与信息提取>课程及笔者实践网络爬虫的笔记. 课程链接: ...

  6. Spring-学习笔记10【Spring事务控制】

    Java后端 学习路线 笔记汇总表[黑马程序员] Spring-学习笔记01[Spring框架简介][day01] Spring-学习笔记02[程序间耦合] Spring-学习笔记03[Spring的 ...

  7. MyBatis-学习笔记10【10.JNDI扩展知识】

    Java后端 学习路线 笔记汇总表[黑马程序员] MyBatis-学习笔记01[01.Mybatis课程介绍及环境搭建][day01] MyBatis-学习笔记02[02.Mybatis入门案例] M ...

  8. Hadoop学习笔记—10.Shuffle过程那点事儿

    Hadoop学习笔记-10.Shuffle过程那点事儿 一.回顾Reduce阶段三大步骤 在第四篇博文<初识MapReduce>中,我们认识了MapReduce的八大步骤,其中在Reduc ...

  9. Linux学习笔记10

    Linux学习笔记10 Linux学习笔记10 正则表达式 源码包约定目录 Shell脚本约定目录 Shell脚本的创建与执行 date命令 同步时间 Shell脚本预设变量 与用户交互 数学计算 S ...

  10. Think in Java第四版 读书笔记10 第16章 数组

    Think in Java第四版 读书笔记10 第16章 数组 数组和容器很像 但他们有一些差别 16.1 数组为什么特殊 数组与容器的区别主要在效率和存储类型 效率:数组是简单的线性序列 使得数组的 ...

最新文章

  1. 实验2  使用T-SQL编写程序
  2. Android 设计模式:(三)装饰者模式 —— 装饰对象
  3. js_sl 延迟菜单
  4. matplotlib xticks 基于 旋转_数据可视化之 matplotlib 绘图篇
  5. Bash脚本报错:“/bin/bash^M: bad interpreter: No such file or directory”
  6. MySQL数据库引擎介绍、区别、创建和性能测试的深入分析
  7. python2版本libnum
  8. mysql ---- 约束
  9. 小心!智能音箱正在监听你?| 极客头条
  10. java ttf_使用iText从* .ttf文件创建字体
  11. D3.js学习(二)
  12. 动态生成 fastCall(易语言 调用WKE浏览器)
  13. oracle jde开发,第一个JDE报表开发
  14. 2021年“泰迪杯”数据分析技能赛A题任务1:数据分析与预测
  15. UBNT设置AP模式注意事项
  16. TIMIT语音库下载以及语音库WAV转换相关问题
  17. hdu 5208 Where is Bob
  18. GetDC与GetWindowDC 的区别
  19. Android MotionEvent详解
  20. MySQL的Binlog原理

热门文章

  1. ue4网格转地形_不用建模就能生成地形,SU怎么办到的?!
  2. rtsp 和 rtmp 推流(一)
  3. 开关电源计算机仿真技术pdf,《开关电源仿真设计》PPT课件.ppt
  4. HTML 网页相关概念
  5. 组成计算机cpu的两大软件是,交换机和计算机一样,也由硬件和软件两部分组成,硬件包括CPU...
  6. php 亚马逊关键字排名,亚马逊提升关键词排名的方法
  7. Visual Studio 2019 许可证过期解决方法
  8. c语言判断两个单词是否为变位词,C++变位词问题分析
  9. LoRaWAN协议入网方式
  10. 活体检测的几种手段分析