由于原始html页面编码格式存在UTF-8、GBK等多种编码格式,如果注入的js包含中文的话,那么在UTF-8或GBK编码的页面就会有一个涌现乱码。有没有办法做到不管是针对GBK、UTF-8编码的页面都能做到正常显示而不会涌现乱码哪?
产生乱码的缘故原由首先来剖析一下产生乱码的缘故原由,我们在浏览器看到的信息都是通过图形学手段在显示器上呈现出来的,而实际保存在打算机硬件上的都是0和1(由于打算机实现是基于二进制),那么打算机要显示、通报信息就须要依赖一套规则把一串串的0和1识别为精确的字符,这便是编码。
例如01000001在ASCII编码规则下对应字母A。相同的0/1串,不同的编码解析出的字符一样平常是不同的,因此如果html页面按照UTF-8的编码解析正常,那么按照GBK的编码解析就会是乱码了。根据上面的示意图,假设注入的js代码为utf-8编码格式,而原始html编码格式也为UTF-8编码格式,那么终极注入这部分中的中文就能正常显示,但是如果原始html为GBK编码,那注入的这部分js代码的中文就会显示乱码。

有一种unicode统一编码字符集,目标是把所有笔墨、字符统一编码,也便是一串0/1组合在unicode字符集下对应的字符是唯一的,不会存在歧义。而js是支持解析unicode字符的,那么就可以在注入js中把要显示的统一转换为unicode编码,浏览器端去解析这个unicode编码,这样不管原始html是UTF-8还是GBK,都能正常显示中文。
原始注入js代码关于中笔墨符的部分
// utf-8编码格式let message = "中文";
办理乱码的注入js代码关于中笔墨符的部分
// utf-8编码格式let message = "\\u4e2d\\u6587"; // 这个编码对应上面的message"中文"
把稳:
注入的js代码仍旧是utf-8编码格式,只是内容转换为unicode编码的形式;unicode中0x4e2d表示的0/1串对应汉字"中",0x6587对应的0/1串对应汉字"文";message实在也不是真正的unicode编码,它只是普通的字符串,只是利用了unicode对应的码点(也便是二进制对应的数值),由于可以利用这个码点在浏览器中规复出精确的字符,事实上unicode字符集并没有规定详细的编码格式。