博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
[小问题笔记(六)] 解决JS已执行,输出内容乱码问题. 顺带总结编码相关知识...
阅读量:4347 次
发布时间:2019-06-07

本文共 1254 字,大约阅读时间需要 4 分钟。

问题:

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编码

 

转载于:https://www.cnblogs.com/hydor/p/4076227.html

你可能感兴趣的文章
C# 创建 读取 更新 XML文件
查看>>
KD树
查看>>
VsVim - Shortcut Key (快捷键)
查看>>
HDU5447 Good Numbers
查看>>
08.CXF发布WebService(Java项目)
查看>>
java-集合框架
查看>>
RTMP
查看>>
求一个数的整数次方
查看>>
点云PCL中小细节
查看>>
铁路信号基础
查看>>
RobotFramework自动化2-自定义关键字
查看>>
CMU Bomblab 答案
查看>>
技术分析淘宝的超卖宝贝
查看>>
Azure云服务托管恶意软件
查看>>
My安卓知识6--关于把项目从androidstudio工程转成eclipse工程并导成jar包
查看>>
旧的起点(开园说明)
查看>>
生产订单“生产线别”带入生产入库单
查看>>
crontab导致磁盘空间满问题的解决
查看>>
自定义滚动条
查看>>
APP开发手记01(app与web的困惑)
查看>>