Page 153 - Node.js开发指南
P. 153

146  第 6 章  Node.js 进阶话题


                 4. Unicode 与国际化
                 Node.js 不支持完整的Unicode,很多字符无法用string 表示。公平地说这不是Node.js 的
             缺陷,而是JavaScript  标准的问题。目前JavaScript  支持的字符集还是双字节的UCS2,即用
             两个字节来表示一个Unicode 字符,这样能表示的字符数量是65536。显然,仅仅是汉字就不
             止这个数目,很多生僻汉字,以及一些较为罕见语言的文字都无法表示。这其实是一个历史
             遗留问题,像2000 年问题(俗称千年虫)一样,都起源于当时人们的主观判断。最早的Unicode
             设计者认为65536个字符足以囊括全世界所有的文字了,因此那个时候盲目兼容Unicode 的系
             统或平台(如Windows、Java 和JavaScript)在后来都遇到了问题。
                 Unicode  随后意识到2个字节是不够的,因此推出了UCS4,即用4  个字节来表示一个
             Unicode 字符。很多原先用定长编码的UCS2 的系统都升级为了变长编码的UTF-16,因为只
             有它向下兼容UCS2。UTF-16 对UCS2 以内的字符采用定长的双字节编码,而对它以外的部分
             使用多字节的变长编码。这种方式的好处是在绝大多数情况下它都是定长的编码,有利于提
             高运算效率,而且兼容了UCS2,但缺点是它本质还是变长编码,程序中处理多少有些不便。
                 许多号称支持UTF-16 的平台仍然只支持它的子集UCS2,而不支持它的变长编码部分。
             相比之下,UTF-8 完全是变长编码,有利于传输,而UTF-32 或UCS4 则是4 字节的定长编码,
             有利于计算。

                 当下的JavaScript  内部支持的仍是定长的UCS2  而不是变长的UTF-16,因此对于处理
             UCS4 的字符它无能为力。所有的JavaScript 引擎都被迫保留了这个缺陷,包括V8 在内,因
             此你无法使用Node.js 处理罕见的字符。想用Node.js 实现一个多语言的字典工具?还是算了
             吧,除非你放弃使用string 数据类型,把所有的字符当作二进制的Buffer 数据来处理。


             6.5  参考资料


                   “深入浅出Node.js  (三):深入Node.js  的模块机制”: http://www.infoq.com/cn/articles/
                   nodejs-module-mechanism。
                   《Node Web开发》David Herron著,人民邮电出版社出版。
                   “遭遇回调函数产生的陷阱”: http://club.cnodejs.org/topic/4f6f057f8a04d82a3d0d230a。
                   What Is Node? JavaScript Breaks Out of the Browser: http://shop.oreilly.com/product/06369
                   20021506. do。
                   “Node.js  究竟是什么?一个“编码就绪”服务器”: http://www.ibm.com/developerworks/
                   cn/opensource/os-nodejs/。
                   “Node.js is Cancer”: http://teddziuba.com/2011/10/node-js-is-cancer.html。
                   “Node.js is Candy”: http://xentac.net/2011/10/05/1-nodejs-is-candy.html。
                   “V8 does not support UCS 4 characters”: http://code.google.com/p/v8/issues/ detail?id=1697。
   148   149   150   151   152   153   154   155   156   157   158