网站乱码和ISO-8859-1与UTF-8

10 11月
预计阅读时间: 1 分钟

今天没事看看博客访问量,发现每天有大量流量来自于关于Spring Boot乱码问题的关键字。基本上达到了网站流量的30%以上。十分费解乱码问题为什么这么多人遇到。

Spring Boot中的乱码问题解决方案非常简单,修改配置中的force为true即可,这里不再叙述。Spring Boot和其中的Spring MVC等只是java世界构建网站的一种选项,还有很多其他语言和其他框架,不过乱码问题是一个很泛的问题,并不是绑定在任何一种语言和框架上的。

我们常说的网站乱码其实是指http请求的编码有问题。原因很简单,默认的编码是ISO-8859-1,而这种编码是一种80年代的遗留标准,它只能表示256个字符,即便对于西方英语用户,这种编码也有很多符号不能正确解决,当然中文更不用说了。

UTF-8是UTF家族的,相对要新,而解决的问题更多,对于绝大部分文字都有很好的支持,属于事实上的标准。

因为ISO-8859-1是历史遗留的标准,所以绝大部分容器仍然都是将其作为默认编码,包括Apache,Tomcat,WebSphere等,而Spring Boot是内嵌Tomcat运行,所以默认编码也是ISO-8859-1,虽然复写了编码为UTF-8,但是并没有设置为force encoding,所以一些版本依然会乱码。

因为默认编码问题在很多地方都存在,所以标准也是相互影响的。

简单来看历史进程是这样的:

  1. 最开始是ASCII,今天也有大量遗留系统使用着
  2. 在WIndow流行时,默认编码是ANSI,也叫Windows-1252
  3. 后来就是ISO-8859-1,这是是随着HTML 2.0标准固定下来的
  4. 再到后来的UTF-8,HTML5的默认编码已经是UTF-8了

参考

http://www.w3schools.com/charsets/

https://www.w3.org/International/articles/http-charset/index

https://en.wikipedia.org/wiki/UTF

https://en.wikipedia.org/wiki/UTF-8

发表评论

电子邮件地址不会被公开。