这段代码在nodejs v0.10.21版本中出现了错误。
#!/usr/bin/env node
"use strict";
var urlEncoded = 'http://zh.wikipedia.org/wiki/%F0%A8%A8%8F';
var urlDecoded = decodeURI( urlEncoded );
var urlLeafEncoded = urlEncoded.substr( 29 );
var urlLeafDecoded = decodeURIComponent( urlLeafEncoded );
var urlLeafFirstCharacterDecoded = urlLeafDecoded.charAt( 0 );
var urlLeafFirstCharacterEncoded = encodeURIComponent( urlLeafFirstCharacterDecoded );
console.log( 'URL encoded = ' + urlEncoded );
console.log( 'URL decoded = ' + urlDecoded );
console.log( 'URL leaf encoded = ' + urlLeafEncoded );
console.log( 'URL leaf decoded = ' + urlLeafDecoded );
console.log( 'URL leaf first character encoded = ' + urlLeafEncoded );
console.log( 'URL leaf first character decoded = ' + urlLeafDecoded );
我收到了以下错误信息。
var urlLeafFirstCharacterEncoded = encodeURIComponent( urlLeafFirstCharacterDe
^
URIError: URI malformed
at encodeURIComponent (native)
at Object.<anonymous> (/media/data/tmp/mwoffliner/test.js:9:36)
at Module._compile (module.js:456:26)
at Object.Module._extensions..js (module.js:474:10)
at Module.load (module.js:356:32)
at Function.Module._load (module.js:312:12)
at Function.Module.runMain (module.js:497:10)
at startup (node.js:119:16)
at node.js:901:3
JavaScript曾经能够正确处理多字节字符,但在这种情况下却不能。尽管"%F0%A8%A8%8F"表示一个中文字符,但JavaScript认为它们是两个字符。我不知道这是否是JavaScript运行时的错误,还是某种编码问题,或者是我的误解。
var char = '';
,现在char.length === 2
,char.charCodeAt(0) === 55394
,char.charCodeAt(1) === 56847
,尽管它只显示为一个字符。 - Paul S.