Dart笔记(10):Runes
存储单位
数据存储是以“字节”(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相关推荐
- Dart基础语言 — Runes
Dart基础语言 - Runes Runes Runes 对象是一个 32位 字符对象,用来表示一个字. 这样设计也是考虑兼容 UTF-16 四个字节的情况. length 和 runes.lengt ...
- thinkphp学习笔记10—看不懂的路由规则
原文:thinkphp学习笔记10-看不懂的路由规则 路由这部分貌似在实际工作中没有怎么设计过,只是在用默认的设置,在手册里面看到部分,艰涩难懂. 1.路由定义 要使用路由功能需要支持PATH_INF ...
- SpringMVC:学习笔记(10)——整合Ckeditor且实现图片上传
SpringMVC:学习笔记(10)--整合Ckeditor且实现图片上传 配置CKEDITOR 精简文件 解压之后可以看到ckeditor/lang下面有很多语言的js,如果不需要那么多种语言的,可 ...
- springmvc学习笔记(10)-springmvc注解开发之商品改动功能
springmvc学习笔记(10)-springmvc注解开发之商品改动功能 springmvc学习笔记(10)-springmvc注解开发之商品改动功能 标签: springmvc springmv ...
- Python 网络爬虫笔记10 -- Scrapy 使用入门
Python 网络爬虫笔记10 – Scrapy 使用入门 Python 网络爬虫系列笔记是笔者在学习嵩天老师的<Python网络爬虫与信息提取>课程及笔者实践网络爬虫的笔记. 课程链接: ...
- Spring-学习笔记10【Spring事务控制】
Java后端 学习路线 笔记汇总表[黑马程序员] Spring-学习笔记01[Spring框架简介][day01] Spring-学习笔记02[程序间耦合] Spring-学习笔记03[Spring的 ...
- MyBatis-学习笔记10【10.JNDI扩展知识】
Java后端 学习路线 笔记汇总表[黑马程序员] MyBatis-学习笔记01[01.Mybatis课程介绍及环境搭建][day01] MyBatis-学习笔记02[02.Mybatis入门案例] M ...
- Hadoop学习笔记—10.Shuffle过程那点事儿
Hadoop学习笔记-10.Shuffle过程那点事儿 一.回顾Reduce阶段三大步骤 在第四篇博文<初识MapReduce>中,我们认识了MapReduce的八大步骤,其中在Reduc ...
- Linux学习笔记10
Linux学习笔记10 Linux学习笔记10 正则表达式 源码包约定目录 Shell脚本约定目录 Shell脚本的创建与执行 date命令 同步时间 Shell脚本预设变量 与用户交互 数学计算 S ...
- Think in Java第四版 读书笔记10 第16章 数组
Think in Java第四版 读书笔记10 第16章 数组 数组和容器很像 但他们有一些差别 16.1 数组为什么特殊 数组与容器的区别主要在效率和存储类型 效率:数组是简单的线性序列 使得数组的 ...
最新文章
- 实验2 使用T-SQL编写程序
- Android 设计模式:(三)装饰者模式 —— 装饰对象
- js_sl 延迟菜单
- matplotlib xticks 基于 旋转_数据可视化之 matplotlib 绘图篇
- Bash脚本报错:“/bin/bash^M: bad interpreter: No such file or directory”
- MySQL数据库引擎介绍、区别、创建和性能测试的深入分析
- python2版本libnum
- mysql ---- 约束
- 小心!智能音箱正在监听你?| 极客头条
- java ttf_使用iText从* .ttf文件创建字体
- D3.js学习(二)
- 动态生成 fastCall(易语言 调用WKE浏览器)
- oracle jde开发,第一个JDE报表开发
- 2021年“泰迪杯”数据分析技能赛A题任务1:数据分析与预测
- UBNT设置AP模式注意事项
- TIMIT语音库下载以及语音库WAV转换相关问题
- hdu 5208 Where is Bob
- GetDC与GetWindowDC 的区别
- Android MotionEvent详解
- MySQL的Binlog原理
热门文章
- ue4网格转地形_不用建模就能生成地形,SU怎么办到的?!
- rtsp 和 rtmp 推流(一)
- 开关电源计算机仿真技术pdf,《开关电源仿真设计》PPT课件.ppt
- HTML 网页相关概念
- 组成计算机cpu的两大软件是,交换机和计算机一样,也由硬件和软件两部分组成,硬件包括CPU...
- php 亚马逊关键字排名,亚马逊提升关键词排名的方法
- Visual Studio 2019 许可证过期解决方法
- c语言判断两个单词是否为变位词,C++变位词问题分析
- LoRaWAN协议入网方式
- 活体检测的几种手段分析