导语 | 每个程序员都应该了解一下字符编码,有了基础概念之后我们对编程语言、字符处理能有更深入的理解。本文我花了大量时间进行资料查阅和考证,希望能够给大家带来一些帮助,多多交流!
一、起因
最近在研究Babel的源码,在看到Acorn词法解析源码中有这样一段逻辑:
pp.fullCharCodeAtPos = function() { let code = this.input.charCodeAt(this.pos) if (code <= 0xd7ff || code >= 0xdc00) return code let next = this.input.charCodeAt(this.pos 1) return next <= 0xdbff || next >= 0xe000 ? code : (code << 10) next - 0x35fdc00}
这段代码初看的时候完全不得其解,看起来像是判断了编码范围,重新计算了一个编码。于是朝着字符编码的方向深入探索了一下,结果发现了一段庞大的历史。
记得在前几年,Emoji的问题还蛮火的,大家都挺奇怪,为什么有的Emoji在JavaScript里的长度是2,还有一个'