zoukankan      html  css  js  c++  java
  • 乱码问题。原创

    今天彻底理解了中文乱码问题,写个随笔记录一下。方便日后查阅。

    主流的编码方式有ASCII(美国码),ISO88591(latin码),GBK码(国标码,也叫中国码),Unicod码(万国码,主流码,苹果推荐),Unicode-Bom(微软自家码,windows系统).

    现在对这几个编码进行简单描述:

    ASCII这个可以说是刚接触编程必须了解的。机器由于只认识0-1,都知道机器产自国外,国外使用的英文标准。要让机器识别英文字母,聪明的人想到其实可以通过关系映射将字母映射为数字,机器处理数字是很简单的。所以才产生了ASCII码。但是发展到现在,这种编码方式完全不适合大部分的需求。所以才有之后的各种编码方式。该编码方式字符占1个字节(byte)。

    ISO88591这个是JAVA必须知道的。由于都是接触到Tomcat服务器,此服务器的编码方式就是ISO编码方式。这个不常用,除了这里。此编码方式占1字节(byte)。

    GBK这个是中国科学家研究出来的,也就相当于当初设计ASCII码一样的道理,但是中国文字这么多,还不包括繁体。只能说大部分都囊括了中华文字。此编码方式中文占2字节(byte)。

    Unicod码简称万国码,适应当今很多国家的编码方式。具体我也太清楚,只知道这个是现在都使用的,这个就够了。如果网站是中国网站,编码方式如果是GBK编码方式,那么在国外访问将会出现乱码,但是Unicode编码方式中文占3字节(byte),相对GBk来说是更占内存的,但是一般这点内存肯定是不考虑的。苹果推崇此编码方式,现在或者将来都会是潮流。记住都使用该编码方式即可。

    Unicode-Boom该编码方式比较变态,是微软自己设计的,没有编码规范。此编码方式同Unicod编码方式差不多,但是会在每个文件默认添加3字节(byte)。Windows系统默认都是此编码方式。你看到的Unicode编码方式其实是假的,可以通过notepad++去查看文件编码方式。

    现在来说说应用。由于传输都是通过byte字节流去传输。如果想传输"你好世界",需要先将这个字符串转为字节流。如果是通过一种编码方式去编码,同样是需要该种编码方式去解码,才能看到你真正的"你好世界"。举个粟子,如果通过GBK编码转为字节流,改字节流有8字节,接受的话同样适用GBK去解码理论上讲这样才是对的。但是当你适用ISO去解码的话由于每个字节都是相当于一个东西,所以得到打印的东西很可能是长度为8的看不懂的东西,如果适用Unicode码去解码的话由于Unicode是3字节,所以解码出来是3个字符,可能的结果是2个看不懂的中文加一个什么东西。

    这里有个用处,由于Tomcat使用的ISO编码方式,中文都看不懂,所以中文传输的话,先是框架将中文转为ISO编码方式,所以需要先通过IOS解码方式变成字节流。再通过Unicod编码方式去编码。这样你才能看得懂.

  • 相关阅读:
    第一个springboot程序,初识springboot
    创建一个简单的springBoot项目的两种方式
    vue过程中遇到的Uncaught (in promise) TypeError: Cannot read property '$message' of undefined
    springboot redis的db动态切换没有作用
    docker redis chown: changing ownership of '.': Permission denied
    axios url携带参数问题(params与data的区别)
    docker安装mysql8.0并挂载到主机
    android与服务器的登录验证与安全设计
    团队冲刺10 5.11
    构建之法01
  • 原文地址:https://www.cnblogs.com/paoxiaoqianzibi/p/7040694.html
Copyright © 2011-2022 走看看