问题:
JS输出的内容出现了乱码。如图:
分析:既然年和月的数字可以正常显示,证明js加载和执行都没有问题
解决:把js引用处的编码方式改成当前页面编码一致。charset="gb2312"(反正不是gb2312就是UTF-8)
常见编码:
- ASCII/EASCII(ISO/IEC 646)
- GB2312/GBK/GB18030
- Unicode/UTF8/UTF16
最早, 使用一个字节的低7位的不同组合来表示字母数字和一些其他字符,2^7 = 128
7位二进制共可以代表128个字母和符号。
后来,为了表示更多的字符便将ASCII扩展为8位,称为,并等同于国际标准。
为了让汉语也能数字化,发明了gb2312,gb2312使用两个字节16位表示汉字,为了兼容ASCII将每个字节的高8位置为1,共有14位可用,2^14 = 16384,但GB 2312标准共收录6763个汉字,后来发现不太够用,又扩展了gbk,gb18030。
终于老外发明了 ,一切都解决了,Unicode有两个字节的16位的编码空间,Unicode是一个归法,比较常用的有UTF8和UTF16两种编码方式。
在web领域比较常用,是一种变长的编码方式,是一种定长方式。
HTML编码:
如果既没有设置http头,也没有meta标签,那么用户代码会使用系统的默认设置,windows下的中文环境的默认编码一般是 gb2312,所以用户代理就会用gb2312来解码页面,如果页面的编码也刚好是gb2312那么万事ok,否则就会出现乱码。
CSS编码:
如果HTML文件和CSS文件的编码不一致,那么就需要单独声明。
在html4中link有一个属性——charset可以用来指定引入css文件的编码,但这个属性在html5中已经废弃了,虽然废弃了但在浏览器中还是可以使用的,下面的代码显示指定css文件的编码为gbk。
然而html5废弃了这个属性那么该怎么办呢,其实废弃这个属性,是因为把这个功能代理给了css文件,css中有一个@charset指定,可以指定页面的编码,将下面的代码放在css文件的顶部,会显示声明页面的编码为utf8。
@charset utf-8
这时候,如果即设置了charset属性,又设置了@charset指定,结果是@charset指定会覆盖link的charset属性。charset属性已经废弃了,建议用css的@charset指令。
JavaScript编码:
除了像文章开始那样指定js编码,还要注意的是:在js中仅支持utf16编码(utf16的子集——ucs-2)这导致在js中无法表示BMP之外的文字。(),如js执行:
'不'.charCodeAt(0)
输入 19981,既十六进制的 4E 0D , 既 ”不“ 的utf16编码。
相关知识点:
json只支持utf8编码