写在前面的话

本文属于 字符编码系列文章之一,更多请前往 字符编码系列。

在JavaScrip中,进行一些GBK或者UTF-8编码的字符操作时,打印出来的经常是乱码,其原因就是因为JavaScript当然内置编码是UCS-2(UTF-16的子集)。

所以弄懂JavaScript的内置编码还是很有必要的,否则对于一些字符操作,如GBK和UTF-8转换时就会模糊不清,无法完全理解。

大纲

UCS-2和UTF-16的区别

JavaScript使用哪一种编码

为什么选用UCS-2

UCS-2的局限

特别注意ES6

UCS-2和UTF-16的区别

关于UCS与Unicode的互相关系与影响这里就不详细介绍了,详情可以参考[【字符编码系列】字符,字符集,字符编码解惑

有一点需要记住: UCS与Unicode的码点是完全一致的。

发布时间上的区别

UCS-2是UCS组织开发的,于1990年公布

UTF-16是Unicode组织开发的,与1996年7月公布

编码的区别

UCS-2是一种定长的编码方式,用两位字节来表示一位码位,码位范围为: 0到0xFFFF的

UTF-16是一种变长编码,它兼容UCS-2,同时可以表示UCS-2无法表示的码位,范围为:0到0x10FFFF。在UCS-2覆盖的范围内,UTF-16用2个字节来表示,其它字符用2个字节来表示

在常见的字符码位中,UCS-2和UTF-16可以认为是同一个意思

总结

UTF-16是UCS-2的超集

也就是是说UTF-16取代了UCS-2,或者说UCS-2整合进入了UTF-16。所以现在一般只有UTF-16,没有UCS-2。

JavaScript使用哪一种编码

JavaScript最初使用的编码是UCS-2

为什么使用UCS-2而不是UTF-16

因为在JavaScript出现的时候,还没有UTF-16。

1990年公布UCS-2

1995年5月,Brendan Eich用了10天设计了JavaScript语言

10月,第一个解释引擎问世

1996年11月,Netscape正式向ECMA提交语言标准

1996年7月公布UTF-16

所以,JavaScript诞生的时候,没有选择,只能使用UCS-2。

关于为什么不使用UTF-8,则是因为UCS-2编码在内存方面的操作及使用效率会更高

UCS-2的局限

由于JavaScript只能处理UCS-2编码,造成所有字符在这门语言中都是2个字节,如果是4个字节的字符,会当作两个双字节的字符处理。

所以,遇到本身应该用4个字节表示的字符时,JavaScript读出来就会不准确,甚至乱码。

例如:亖这个字符为例,它的UTF-16编码是4个字节的0xD834 DF06。

4个字节的编码不属于UCS-2,JavaScript不认识,只会把它看作单独的两个字符U+D834和U+DF06。这两个码点是空的,所以JavaScript会认为亖是两个空字符组成的字符串!

特别注意ES6

以上使用UCS-2的JavaScript只针对于ES5及以前的版本。

对于ES6及以后的JavaScript,是支持识别4个字节码点的。

也就是说: ES6及其以后的JavaScript可以认为内置编码是UTF-16

tips: 是否支持ES6由具体的实现引擎决定

附录

博客

初次发布2017.05.30于个人博客

参考资料

java ucs 2,【字符编码系列】JavaScript使用的编码-UCS-2相关推荐

  1. android utf-8 转 gbk编码,【字符编码系列】GBK,UTF-8,UTF-16之间的转换

    写在前面的话 本文属于 字符编码系列文章之一,更多请前往 字符编码系列. 大纲 不同编码转换的理论基础 UTF-16转UTF-8 UTF-16转GBK UTF-16和UTF-8之间的转换 UTF-16 ...

  2. 【JAVA编码专题】JAVA字符编码系列一:Unicode,GBK,GB2312,UTF-8概念基础

    这两天抽时间又总结/整理了一下各种编码的实际编码方式,和在Java应用中的使用情况,在这里记录下来以便日后参考. 为了构成一个完整的对文字编码的认识和深入把握,以便处理在Java开发过程中遇到的各种问 ...

  3. 【JAVA编码专题】 JAVA字符编码系列三:Java应用中的编码问题

    这两天抽时间又总结/整理了一下各种编码的实际编码方式,和在Java应用中的使用情况,在这里记录下来以便日后参考. 为了构成一个完整的对文字编码的认识和深入把握,以便处理在Java开发过程中遇到的各种问 ...

  4. 【JAVA编码】 JAVA字符编码系列二:Unicode,ISO-8859,GBK,UTF-8编码及相互转换

    http://blog.csdn.net/qinysong/article/details/1179489 这两天抽时间又总结/整理了一下各种编码的实际编码方式,和在Java应用中的使用情况,在这里记 ...

  5. unix系统编码 java_JAVA字符编码系列三:Java应用中的编码问题

    这两天抽时间又总结/整理了一下各种编码的实际编码方式,和在Java应用中的使用情况,在这里记录下来以便日后参考. 为了构成一个完整的对文字编码的认识和深入把握,以便处理在Java开发过程中遇到的各种问 ...

  6. java字符编码问题_JAVA字符编码系列三:Java应用中的编码问题

    1. 概述 本文主要包括以下几个方面:编码基本知识,java,系统软件,url,工具软件等. 在下面的描述中,将以"中文"两个字为例,经查表可以知道其GB2312编码是" ...

  7. java linux urlencode_java字符编码转换研究(转)

    1. 概述 本文主要包括以下几个方面:编码基本知识,java,系统软件,url,工具软件等. 在下面的描述中,将以"中文"两个字为例,经查表可以知道其GB2312编码是" ...

  8. 前端代码编码和设计规范系列——JavaScript编程规范

    1文档信息 条目 内容 项目编号 通用 项目名称 通用 标题 JavaScript编程规范 类别 规范文档 当前 试用草稿 摘要 当前版本 V1.0 日期 2015/11/9 作者 徐维坚(xuwei ...

  9. 计算机ucs汉字编码,字符编码基础知识 - Unicode,UCS,GBK,GB2312,UTF-8

    字符编码基础知识- Unicode,UCS,GBK,GB2312,UTF-8 最近遇到一个Unicode和UTF-8关系比较的问题,之前在处理中文显示时也遇到过类似的问题,于是花时间学习了一下,在此做 ...

最新文章

  1. Git 的简单使用及ssh配置问题-赖大大
  2. 寒武纪上市:AI芯片和普通芯片有何不同?全球AI芯片公司大全都在这里了
  3. 营销网站SEO优化:前方优化难点出没!
  4. JPA-CascadeType四个属性的讲解
  5. 图像处理 花屏_滴滴开源的 AoE:工程实践中的图像处理
  6. word域变成正常文本_【Word小技巧】不学会后悔哦~
  7. matlab读取xls、xlsx、csv文件
  8. 因担心5G电磁辐射 这个地方的居民试图阻止5G基站扩张
  9. Polka.Domain完成40万美元私募轮融资
  10. redis原理及实现
  11. 阿里拟 20 亿美元收购网易考拉;联通 5G 套餐最低 190 元;Rust 1.37.0 发布 | 极客头条...
  12. 大数据应用存在哪些安全隐患
  13. 我的超休闲游戏作品集
  14. html中首行缩进两个字符
  15. iOS_6_ToolBar+xib+红楼梦
  16. app兼容性测试方案
  17. fortran——实数和复数(矢量)运算
  18. 有限差分——图像求偏导
  19. Qt QDcokWidget 最大化
  20. [架构之路-159]-《软考-系统分析师》-10-系统分析-6-现有业务流程分析, 系统分析最核心的任务

热门文章

  1. VS误删sln项目文件怎么办
  2. 那个信奉“人沉静时智慧升起”的思想者
  3. linux下系统调用接口,LINUX系统调用
  4. GPS入门 3 —— GPS的热启动、冷启动和温启动 [转]
  5. 如何解决微软拼音不能打出中文标点的问题?
  6. 计算机主题桌面更改不了,电脑桌面怎么换主题?更换电脑桌面主题
  7. 怎么在桌面上显示计算机编号,敬业签Windows电脑桌面云便签怎么添加序号?
  8. 欧视达AS-900S升级方法(中星9号卫星2010年6月23日升级后)
  9. 关于电商软件市场的格局点评
  10. 树莓派装Ubuntu系统配置串口引脚与stm32通信