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编码的更多相关文章

  1. SQL Server 中怎么查看一个字母的ascii编码或者Unicode编码

    参考文章:微信公众号文章 在sql中怎么查看一个字符的ascii编码,so easy !! select ASCII('a') SELECT CHAR(97) charNum SELECT UNICO ...

  2. JS操作Unicode编码的emoji表情显示在页面

    前言:项目中用到了emoji表情,后端传递数据时直接是以Unicode形式,在页面总是无法展示,找尽各种方法总算是试出了一种,虽然达到效果但是并不是特别理解其中的原理并且无比笨拙,贴在这用作笔记,如果 ...

  3. [转]程序员趣味读物:谈谈Unicode编码

    from : http://pcedu.pconline.com.cn/empolder/gj/other/0505/616631_all.html#content_page_1 这是一篇程序员写给程 ...

  4. java中文乱码解决之道(三)-----编码详情:伟大的创想---Unicode编码

    随着计算机的发展.普及,世界各国为了适应本国的语言和字符都会自己设计一套自己的编码风格,正是由于这种乱,导致存在很多种编码方式,以至于同一个二进制数字可能会被解释成不同的符号.为了解决这种不兼容的问题 ...

  5. Unicode编码解码在线转换工具

    // Unicode编码解码在线转换工具 Unicode 是基于通用字符集(Universal Character Set)的标准来发展,并且同时也以书本的形式(The Unicode Standar ...

  6. .Net(c#)汉字和Unicode编码互相转换

    {"Tilte": "\u535a\u5ba2\u56ed", "Href": "http://www.cnblogs.com&q ...

  7. 转载:谈谈Unicode编码,简要解释UCS、UTF、BMP、BOM等名词

    转载: 谈谈Unicode编码,简要解释UCS.UTF.BMP.BOM等名词 这是一篇程序员写给程序员的趣味读物.所谓趣味是指可以比较轻松地了解一些原来不清楚的概念,增进知识,类似于打RPG游戏的升级 ...

  8. unicode编码与utf-8 区别

    unicode编码与utf-8 区别 如果是为了跨平台兼容性,只需要知道,在 Windows 记事本的语境中: 所谓的「ANSI」指的是对应当前系统 locale 的遗留(legacy)编码.[1] ...

  9. 中文字符串转换为十六进制Unicode编码字符串

    package my.unicode; import java.util.regex.Matcher; import java.util.regex.Pattern; public class Uni ...

  10. C# Unicode编码

    为了避免在浏览器中传输数据的时候出现中文乱码,我们可以将内容进行URL编码,当然也可以将内容进行UNICODE编码.将汉字进行UNICODE编码,如:"王"编码后就成了" ...

随机推荐

  1. 3DES封装类

    using System;using System.Collections.Generic;using System.Linq;using System.Web;using System.Web.Se ...

  2. iOS 时间处理(转)

    NSDate NSDate对象用来表示一个具体的时间点. NSDate是一个类簇,我们所使用的NSDate对象,都是NSDate的私有子类的实体. NSDate存储的是GMT时间,使用的时候会根据 当 ...

  3. 繁华模拟赛 Vincent的城堡

    #include<iostream> #include<cstdio> #include<string> #include<cstring> #incl ...

  4. cocos基础教程(3)cocos3.x版本目录结构介绍

    简介 cocos2d-x-3.x版本进行了很多优化,比如:将TTF字体用Atlas缓存,节点重排序官方声称提升了10倍速度,查找.移除节点方面也提高了10%,拆分渲染层到独立的线程运行: 另外,coc ...

  5. Spring各个jar包的简介

    spring.jar是包含有完整发布的单个jar 包,spring.jar中包含除了spring-mock.jar里所包含的内容外其它所有jar包的内容,因为只有在开发环境下才会用到 spring-m ...

  6. Spring AOP使用整理:各种通知类型的介绍

    2.PersonImpl类的源码 public class PersonImpl implements Person { private String name; private int age; p ...

  7. Toast工具类,Android中不用再每次都写烦人的Toast了

    package com.zhanggeng.contact.tools; /** * Toasttool can make you use Toast more easy ; * * @author ...

  8. Mysql limit offset

    Mysql limit offset 假设数据库表student存在13条数据. 语句1:select * from student limit 9,4 语句2:slect * from studen ...

  9. hiho一下 第九十六周 数论五·欧拉函数

    题目1 : 数论五·欧拉函数 时间限制:10000ms 单点时限:1000ms 内存限制:256MB 描述 小Hi和小Ho有时候会用密码写信来互相联系,他们用了一个很大的数当做密钥.小Hi和小Ho约定 ...

  10. MySQL的分页

    有朋友问: MySQL的分页似乎一直是个问题,有什么优化方法吗?网上看到网上推荐了一些分页方法,但似乎不太可行,你能点评一下吗? 方法1: 直接使用数据库提供的SQL语句 ---语句样式: MySQL ...