字符集和java的编码与解码 阳光穿透心脏的1/2处 2024-03-16 17:37 10阅读 0赞 一、ASCII和GBK字符集 计算机存储一个英文字符需要一个字节。 ASCII字符集,包括128(0000000B~1111111B)个数据,存储英文字母和字符,对于欧美国家够用。 例如,存储字符’a’,查询ASCII得到为97,二进制为1100001B,计算机进行编码,ASCII编码规则为“前面补0,补齐8位”,所以’a’存储位01100001B。 当从硬盘上读取’a’时,读到01100001B,解码时直接将二进制转化为十进制,再通过查询ACII得出结果。 ![在这里插入图片描述][9700f1c728f54a39af0188f09e60b722.png] GB2312-80:中华人民共和国国家标准信息交换用汉字编码字符集基本集。GB表示标准,2312是版本号,80表示年份1980年,只有简体汉字。 ![在这里插入图片描述][6df2e805a16146618292057c128c8f57.png] GBK中的K是扩的首字母。windows系统简体中文版默认使用的就是GBK。 ![在这里插入图片描述][89a582203fe94d31a13d5031442f6a72.png] 有时在文件中会看见编码方式为ANSI,表示使用平台默认的字符集和编码方式,windows简体中文使用GBK。 后来,美国国家标准协会提出了国际标准字符集Unicode(万国码),它将世界各种语言的每个字符定义一个唯一的编码,以满足跨语言、跨平台的文本信息交换。 GBK的存储规则: (1)英文也是使用一个字节进行存储,完全兼容ASCII。 (2)汉字用两个字节存储。高位字节二进制一定以1开头(为了与英文区分开,英文的字符开头位0 ),转成十进制之后是一个负数。 GBK读取字节流时,遇到以0开头的字节则表示英文的一个字符,遇到以1开头的字节,则表示这个字节与后面的一个字节组合起来表示一个汉字。 二、Unicode Unicode UTF-16编码规则:用2-4个字节保存。英文转为16位。其他文字可能更长。 UTF表示Unicode Transfer Format,即Unicode字符集转换模式。16表示转为16个比特位。 UTF-32编码规则,固定使用四个字节保存。 UTF-8编码规则:用1~4个字节保存。不同国家长度不同,只需记住ASCII码用一个字节(第一位为0),简体中文用3个字节(第一个字节前4为固定为1110,第二个字节前两位固定为10,第三个字节前两位固定为10)。 注意:UTF-8不是字符集,是编码规则(Unicode字符集的编码规则)。ASCII、GRK、Unicode是字符集。 例如: ![在这里插入图片描述][66b82aad55fb41388bc5729ff4459e83.png] 注意:字符集除了对不同字符进行编码,存储之前还有一个编码的过程。查询Unicode找到指定字符的编码,转为二进制数后,使用UTF-8编码规则进行编码,固定位不变,其他位用得到的二进制数进行填充。 三、乱码原因 原因1:读取数据时未读完整个汉字。 ![在这里插入图片描述][1159f0afb00f425bb9dcee6c84dbdd47.png] ![在这里插入图片描述][beec4b3d416f4f2282627c7ec19d89d9.png] 注:只读了三分之一的中文,查不到对应字符,有的系统显示?,有的显示方框。 原因2:编码与解码方式不统一。 ![在这里插入图片描述][3ac4a010f22848dba0c6146f54af9e97.png] 如何不产生乱码: (1)不要用字节流读取文本文件; (2)编码解码时使用同一个码表,同一个编码方式。 四、java中的编码与解码 ![在这里插入图片描述][0b99bf3f8b8640039cf8d87a240fd951.png] 注:使用默认方式可以通过看软件的指定位置。 ![在这里插入图片描述][f7f9caaa56624ba68a4f8d0c52521fbc.png] 可以看出上图中显示idea默认使用UTF-8编码。 例如: ![在这里插入图片描述][0ac5875f724d49df9369d328df09217e.png] 字符串"ai你"通过UTF-8编码,'a’和’i’为一个字节,'你’三个字节。 再例如: ![在这里插入图片描述][4d6750cd7caf4c00bbe605d730c66bab.png] 指定使用GBK编码方式,'a’与’i’为一个字节,'你’为两个字节。 解码的例子: 使用默认解码方式UTF-8: ![在这里插入图片描述][62693aa7f6f449b4b1b1a0daeb4761f8.png] 再例如,指定GBK的解码方式: ![在这里插入图片描述][868878b5f9ec4810b5a4c2c3ba8f0e23.png] 因为编码默认为UTF-8,而解码使用GBK,造成乱码现象。 [9700f1c728f54a39af0188f09e60b722.png]: https://image.dandelioncloud.cn/pgy_files/images/2024/03/15/8a3f4662054a4326a147f60219cff269.png [6df2e805a16146618292057c128c8f57.png]: https://image.dandelioncloud.cn/pgy_files/images/2024/03/15/5dc06a9985f84c13b10541143c97aabe.png [89a582203fe94d31a13d5031442f6a72.png]: https://image.dandelioncloud.cn/pgy_files/images/2024/03/15/a8611e9bd8d042fc870de0d2c712fb61.png [66b82aad55fb41388bc5729ff4459e83.png]: https://image.dandelioncloud.cn/pgy_files/images/2024/03/15/e38c1cb8b09848c885a0dd5d75cbc4df.png [1159f0afb00f425bb9dcee6c84dbdd47.png]: https://image.dandelioncloud.cn/pgy_files/images/2024/03/15/2a8c5e42e05847b19daca4d96a399027.png [beec4b3d416f4f2282627c7ec19d89d9.png]: https://image.dandelioncloud.cn/pgy_files/images/2024/03/15/3b15e21f7d824a7c80f765991ac62b1d.png [3ac4a010f22848dba0c6146f54af9e97.png]: https://image.dandelioncloud.cn/pgy_files/images/2024/03/15/63f494af10584aec86463bb644480b8a.png [0b99bf3f8b8640039cf8d87a240fd951.png]: https://image.dandelioncloud.cn/pgy_files/images/2024/03/15/b9c424a555934faeb8978ce593ba7a12.png [f7f9caaa56624ba68a4f8d0c52521fbc.png]: https://image.dandelioncloud.cn/pgy_files/images/2024/03/15/3300bda284a64450a9c4208acf4d35c0.png [0ac5875f724d49df9369d328df09217e.png]: https://image.dandelioncloud.cn/pgy_files/images/2024/03/15/3e6d3c195c89430c994b7dda4d56c3ba.png [4d6750cd7caf4c00bbe605d730c66bab.png]: https://image.dandelioncloud.cn/pgy_files/images/2024/03/15/e65621bd44614fbca85070a6c444862c.png [62693aa7f6f449b4b1b1a0daeb4761f8.png]: https://image.dandelioncloud.cn/pgy_files/images/2024/03/15/e569bfc75c3a4b698501b0fc5dd3aeb8.png [868878b5f9ec4810b5a4c2c3ba8f0e23.png]: https://image.dandelioncloud.cn/pgy_files/images/2024/03/15/ec3ffdd185c04b9bae8f310ab0491c91.png
相关 字符集和java的编码与解码 一、ASCII和GBK字符集 计算机存储一个英文字符需要一个字节。 ASCII字符集,包括128(0000000B~1111111B)个数据,存储英文字母和字符,对于欧 阳光穿透心脏的1/2处/ 2024年03月16日 17:37/ 0 赞/ 11 阅读
相关 Java编码与解码 > 首先区分加密与编码并不是一回事, > > 本节主要讲述常见的三种编解码方式,分别为:Unicode、URL、Base64。 1. 常见编码算法: 矫情吗;*/ 2023年09月23日 16:19/ 0 赞/ 112 阅读
相关 Java字符集编码解码详细介绍 文章目录 字符集 字符集的基本认识 字符集编码和解码 字符集 字符集的基本认识 字符集基础知识 > 川长思鸟来/ 2023年09月23日 12:57/ 0 赞/ 87 阅读
相关 java url编码和解码 1. 代码 public static void main(String[] args) { try { 落日映苍穹つ/ 2022年12月06日 01:08/ 0 赞/ 246 阅读
相关 url编码 java_java中的url 编码与解码 在开始讨论编码解码之前,首先来明确一下问题。 什么是application/x-www-form-urlencoded字符串? 答:它是一种编码类型。当URL地址里包含非西 Myth丶恋晨/ 2022年11月01日 14:00/ 0 赞/ 280 阅读
相关 [Java] java 的字符集和编码方案 Java使用内在的Unicode 表示字符。Unicode 试图用两个字节来表示世界上的所有字符。 这一点可以从java.nio.charset.CharsetEncoder 忘是亡心i/ 2022年06月18日 04:45/ 0 赞/ 104 阅读
相关 Java中的编码与解码 在前面学习字符流的时候,我们提到过关于编码的问题,这是个巨坑,一不小心可能就会有乱码出现,但是只要我们弄懂这编码与解码的原理,就能尽量避免踩坑了 > 何谓编码?何谓解码? 悠悠/ 2022年06月06日 11:10/ 0 赞/ 216 阅读
相关 编码解码(字符集) 1.基础概念 计算机中储存的信息都是用二进制数表示的,而我们在屏幕上看到的英文、汉字等字符是二进制数转换之后的结果。通俗的说,按照何种规则将字符存储在计算机中,如’a’用 Love The Way You Lie/ 2022年05月13日 12:36/ 0 赞/ 303 阅读
相关 字符集与字符集编码详解 字符集与字符集编码详解 我们知道,计算机只能识别诸如 0101 这样的二进制数,于是人们必须以二进制数据与计算机进行交互,或者先将人类使用的字符按一定规则转换为二进制数。 亦凉/ 2022年04月08日 10:51/ 0 赞/ 421 阅读
还没有评论,来说两句吧...