javascript 的 fromCharCode 如何实现 PHP chr 127 位之后的 ascii 转换?

2017-10-18 14:10:30 +08:00
 xoxo419

搜索找到这样一段代码

function test(){  
  var c="";  
  for(var i=1;i<65536;i++){  

    if((i%10)==0){  

         c+=i+':\t'+String.fromCharCode(i)+'\t'+'\n';

    } else {  

         c+=i+':\t'+String.fromCharCode(i)+'\t';}  
  }  
     document.write(String.fromCharCode(i));
}

else 上下也没有什么不一样的, 为什么可以转 127 之后?

2746 次点击
所在节点    程序员
1 条回复
lonelinsky
2017-10-18 15:16:44 +08:00
多谢 lz,顺便去开了下眼界。

lz 贴的代码的最后一行应该是写错了,应该是 document.write(c);

首先这个问题直接查 fromCharCode 的文档就可以得到答案了,https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/fromCharCode 可以看到 fromCharCode 接受的参数是一个 unicode 值,处理 127 以后当然没问题啦。

开眼界的地方在于后续查了 https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/fromCodePoint 然后看到现在 Unicode 已经是 U+0000-U+U+10FFFF 了,然后对于大于 U+FFFF 的是使用 UTF-16 surrogate pairs 来实现的,然后再 js 里面就会出现只有一个字符的字符串,但是字符串长度是 2 的情况…

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/398633

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX