21年11月24日___编码和端口号
我们在造web项目的时候,一不小心就会遇到网页输入的字符是好的,但是数据库里存储进的字符是乱码的现象;
项目运行后,我们在浏览器上输入本机地址127.0.0.1后,还要加上个:8080才能写咱们的项目名称;
这是为什么呢?
几天旭哥跟你聊聊历史,顺便探讨一下这其中的问题。
没错,又是一篇水文。。。。
以下内容纯属自创、手打,如有雷同,那准是你抄的我的[/dog]
编码:
计算机是美国人发明的。刚被发明的时候,为了表示它们的语言,还有控制计算机器的运作,它们自己搞出了一套体系,就是今天的ASCII码。
这个ASCII码只包含了128个字符,分为可见字符(A-Z,a-z,0-9,@%#等),还有控制字符(换行,空格等)两大类。
他们自己是够用了,每个字符还只需要一个字节的空间。
后来计算机传入了欧洲,欧洲人一看这玩意儿不能表示我们的语言,又加了128个字符进去,叫“扩展ASCII码”,也就是“ISO-8895-1"编码。
现在Tomcat默认用的就是这种编码。
这群西方佬认为全世界就他们那用得起计算机,就给Tomcat的编码设置成这种一个字节的编码,害得我们转译汉字时还得设置编码格式。
后来计算机传入了中国,中国人一看字符集里没有本国的编码,顿时不干了。
先后发明出"GB-2312","GBK","GB-18030"编码,从汉字和繁体字到生僻字到少数民族的字都加了一遍。
我们现在常用的就是“GBK"编码了,有汉字、繁体字和生僻字,日常生活完全够用。
由于汉字实在太多,所以我们的汉字用两个字节来表示。
后来“印度码”,“荷兰码”,“塔吉克斯坦码”,“吉尔吉斯斯坦码”等相继问世,各国之间的转码解码标准非常不一致。
再后来,随着互联网的高速发展,国家之间的通信变得异常艰难。
于是有个国际性组织把所有国家的字符全部拿过来,硬生生弄出个占4个字节的“utf-32"编码,啥啥都4字节,无论是汉字的”囖”还是字母“a"。
现在java还在用“Unicode”编码(另外还有“utf-8","utf-16"),毕竟这样保险,啥字符都能对应出来。
然后有的人看不下去了,我用一个字节就能存储的东西,你让我开辟四倍大的空间?!
于是这些大佬发明了“可变长字符集”编码,也就是“utf-8","utf-16"等,它们可以根据字符不同,动态地变化字节大小编码解码。
于是,纷争平息,大家各回各家各找各妈。
总结:我们存储进数据库中的数据是乱码,根本原因就是我们没有统一编码解码。
从客户端到服务器,从服务器到数据库,都需要进行一致的编码解码。
下面这句代码是将字符串str1以"iso-8895-1"解码到字节数组,再把字节数组用"utf-8"编码,用str2接收。
String str2=new String(str1.getBytes("iso-8859-1"),"UTF-8");
端口号:
所谓的端口,就好像是门牌号一样,客户端可以通过ip地址找到对应的服务器端。
但是服务器端是有很多端口的,每个应用程序对应一个端口号,通过类似门牌号的端口号,客户端才能真正的访问到该服务器。
为了对端口进行区分,将每个端口进行了编号,这就是端口号。
------百度百科
一个主机上的端口号是固定的,有65535个(2个字节最大保存的数)。
8080:Tomcat默认端口
3306:Mysql默认端口
80:http协议
443:加密的http--->https
1433:Sql Server默认端口