关于encodeURIComponent编码非UTF-8字符时出现的怪异情况

2021-03-29 16:24

阅读:298

YPE html>

标签:one   oct   code   encode   com   出现   head   之间   问题   

现在有个test.html文件,这个文件的编码是UTF-8,其中“你好”的UTF-8编码是:E4 BD A0 E5 A5 BD,文件代码如下:

hello你好

可以看见,enencodeURIComponent就是将“你好”以UTF-8编码输出(这也正是encodeURIComponent方法的定义:将非URI字符都以UTF-8编码的格式输出为字符串),现在来看一个怪异的情况,还是上面的test.html(所以文件的编码依旧是UTF-8),只不过这次手动把charset改为了GBK编码,用来误导encodeURIComponent方法,代码如下:


hello你好

什么,输出的是什么鬼!不着急,我们慢慢分析:
encodeURIComponent认为需要encode的字符的编码是charset指定的编码,这里就是GBK,而encodeURIComponent需要的是UTF-8编码的字符,这样它才会进行encode,所以必须发生编码之间的转换,具体如下,
“你好”的UTF-8:E4 BD A0 E5 A5 BD
所以“你好”实际上是以上面的6字节存储在文件test.html里面(因为文件的实际编码是UTF-8)
但是charset指定的GBK是2字节编码(除128个ASCII外,都是2字节编码),所以它把E4 BD认为是1个GBK字符,尝试把它转为UTF-8,其中E4 BD在GBK中对应的是“浣”字,而这个字在UTF-8则是E6 B5 A3
由此问题解决!

关于encodeURIComponent编码非UTF-8字符时出现的怪异情况

标签:one   oct   code   encode   com   出现   head   之间   问题   

原文地址:https://www.cnblogs.com/ryzz/p/12606447.html


评论


亲,登录后才可以留言!