Unicode编码
Unicode为世界上所有的文字系统的每一个字符单位分配了一个唯一的整数,称为代码点,范围为:0~1114111;
ASCII将每一索引映射为唯一的二进制表示,但Unicode允许多个不同二进制编码的代码点;
不同的编码在要求存储的字符串数量和操作速度之间进行平衡,由此产生如UTF-8,UTF-16,UTF-32;
历史发展:
- 早期由于错误地估算了代码点的容量范围,认为Unicode最多只需要2^16个代码点,而产生了USC-2,为16位编码的原始标准;
- USC-2是由独立的16位代码单元组成的,每个代码单元对应一个单独的Unicode代码点;
- 这种编码的好处在于索引字符串是一种代价小,固定时间的操作;获取某个字符串的第N个代码点只要选取数组的第N个16位元素;(0X0000)
- 结果是许多平台如Java,JavaScript等都采用16位编码的字符串;
- 随后Unicode扩大范围之后,新增加了17个大小为2^16的代码点范围;第一个子范围称为基本多文种平面,其他16个范围称为辅助平面;
- 之后UTF16取代USC-2,其采用代理对表示附加的代码点;一对16位的代码单元共同编码一个等于或大于2^16的代码点;
- 这导致了:
- 代码单元的索引与代码点的索引不同;
- UTF-16是一种可变长度的编码;
- 长度为N的字符串内存大小变化基于该字符串特定的代码点;
- 查找N个代码点不再是固定时间;
Javascript的影响:
- 当Unicode扩大范围时,Javascript已经采用16位的字符串元素,字符串的属性和方法都是基于代码单元层级,而不是代码点层级;
- 所以当字符串包含辅助平面中的代码点时,Javascritp将每个代码点表示为两个元素;即一个Javascirp字符串的元素是一个16位的代码单元;
- 考虑到字符串的属性和方法,字符串表现得像UTF-16的代码单元序列;所以在对字符串计数的时候,如包含辅助平面,长度可能会有不同;
- 类似的在正则表达式也是工作与代码单元层级;其单子模式匹配('.')一个单一的代码单元;所以遇到辅助平面字符时可能需要('..')才能匹配;
所以Javascript在处理特殊的Unicode编码的字符串时要注意;
Unicode编码的更多相关文章
- SQL Server 中怎么查看一个字母的ascii编码或者Unicode编码
参考文章:微信公众号文章 在sql中怎么查看一个字符的ascii编码,so easy !! select ASCII('a') SELECT CHAR(97) charNum SELECT UNICO ...
- JS操作Unicode编码的emoji表情显示在页面
前言:项目中用到了emoji表情,后端传递数据时直接是以Unicode形式,在页面总是无法展示,找尽各种方法总算是试出了一种,虽然达到效果但是并不是特别理解其中的原理并且无比笨拙,贴在这用作笔记,如果 ...
- [转]程序员趣味读物:谈谈Unicode编码
from : http://pcedu.pconline.com.cn/empolder/gj/other/0505/616631_all.html#content_page_1 这是一篇程序员写给程 ...
- java中文乱码解决之道(三)-----编码详情:伟大的创想---Unicode编码
随着计算机的发展.普及,世界各国为了适应本国的语言和字符都会自己设计一套自己的编码风格,正是由于这种乱,导致存在很多种编码方式,以至于同一个二进制数字可能会被解释成不同的符号.为了解决这种不兼容的问题 ...
- Unicode编码解码在线转换工具
// Unicode编码解码在线转换工具 Unicode 是基于通用字符集(Universal Character Set)的标准来发展,并且同时也以书本的形式(The Unicode Standar ...
- .Net(c#)汉字和Unicode编码互相转换
{"Tilte": "\u535a\u5ba2\u56ed", "Href": "http://www.cnblogs.com&q ...
- 转载:谈谈Unicode编码,简要解释UCS、UTF、BMP、BOM等名词
转载: 谈谈Unicode编码,简要解释UCS.UTF.BMP.BOM等名词 这是一篇程序员写给程序员的趣味读物.所谓趣味是指可以比较轻松地了解一些原来不清楚的概念,增进知识,类似于打RPG游戏的升级 ...
- unicode编码与utf-8 区别
unicode编码与utf-8 区别 如果是为了跨平台兼容性,只需要知道,在 Windows 记事本的语境中: 所谓的「ANSI」指的是对应当前系统 locale 的遗留(legacy)编码.[1] ...
- 中文字符串转换为十六进制Unicode编码字符串
package my.unicode; import java.util.regex.Matcher; import java.util.regex.Pattern; public class Uni ...
- C# Unicode编码
为了避免在浏览器中传输数据的时候出现中文乱码,我们可以将内容进行URL编码,当然也可以将内容进行UNICODE编码.将汉字进行UNICODE编码,如:"王"编码后就成了" ...
随机推荐
- UESTC 1817 Complete Building the Houses
Complete Building the Houses Time Limit: 2000MS Memory Limit: 65535KB 64bit IO Format: %lld & %l ...
- 深入理解Java中的继承
对于面向对象的程序设计而言,每一个程序员都应该去了解Java中的封装,继承和多态,那么我今天来说的主要是以继承为核心的主题. 一.关于对继承的理解. 继承是面向对象的三大特性之一,是java中实现代码 ...
- 探讨关于C#中Foreach的本质
一.为什么数组和集合可以使用foreach遍历 01. 因为数组和集合都实现了IEnumerable接口,该接口中只有一个方法,GetEnumerator() 02.数组类型是从抽象基类型 Array ...
- Android ADB命令大全(通过ADB命令查看wifi密码、MAC地址、设备信息、操作文件、查看文件、日志信息、卸载、启动和安装APK等)
ADB很强大,记住一些ADB命令有助于提高工作效率. 获取序列号: adb get-serialno 查看连接计算机的设备: adb devices 重启机器: adb reboot 重启到bootl ...
- zookeeper 用法和日常运维
本文以ZooKeeper3.4.3版本的官方指南为基础:http://zookeeper.apache.org/doc/r3.4.3/zookeeperAdmin.html,补充一些作者运维实践中的要 ...
- 深入学习微框架:Spring Boot - NO
http://blog.csdn.net/hengyunabc/article/details/50120001 Our primary goals are: Provide a radically ...
- ToDo系列
leetcode http://www.cnblogs.com/TenosDoIt/tag/leetcode/ http://tech-wonderland.net/category/algorith ...
- iOS 关于多线程的一些知识点(不断更新)
1.NSOperation 对于NSOperation,In OS X v10.6 and later, operation queues ignore the value returned by t ...
- ffplay 2.5.3 媒体播放器
下载地址 http://pan.baidu.com/s/1bnlMYB1 一定要解压到 D:\ffmpeg\ 目录下 双击 OpenWith_FFPlay.reg 注册ffplay 在视频文件名上面, ...
- codeforces B. Simple Molecules 解题报告
题目链接:http://codeforces.com/problemset/problem/344/B 题目意思:这句话是解题的关键: The number of bonds of an atom i ...