张小飞的Java之路字符串编码

写在前面:

视频是什么东西,有看文档精彩吗?

视频是什么东西,有看文档速度快吗?

视频是什么东西,有看文档效率高吗?



1. 编码问题

诸小亮:接下来咱们看看——字符串编码

张小飞:这是什么意思?

诸小亮:计算机只能处理二进制数据,而人类的语言多种多样,为了把人类语言转换为二进制先辈们使用二进制跟人类语言做了个映射,这就是编码

张小飞:是 ASCII 码?

诸小亮: ASCII 码只是最基础的一种,还有其他的编码方式,比如:

张小飞:为什么弄这么多编码方式呢?

诸小亮:这是因为世界上语言复杂多样,所以不同语言有不同的编码

1. ASCII码

诸小亮:咱们首先看——ASCII码

ASCII一共规定了128个字符的编码,比如:

这128个符号只占用了一个字节的后面7位,最前面的1位统一规定为0

2. ISO-8859-1编码

张小飞:ISO-8859-1 是?

诸小亮:英语 ASCII码 就够了,但是用来表示其他语言,明显是不够的,比如,在法语中,字母上方有注音符号,它就无法用ASCII码表示,所以又发明了 iso8859-1:又称 Latin1(拉丁码表),兼容ASCII码,同时支持部分欧洲语言

张小飞:原来如此

3. GBK

诸小亮:GBK——用来表示中文的编码表

张小飞:中文不能用 ASCII 表示?

诸小亮:是的,ASCII 码中,一个英文字母只用一个字节表示就够了,但汉字比较特殊,需要用两个字节表示,所以我们就发明了GBK编码表,GBK:中文编码表,原来是GB2312,GBK是对它的扩充,同样兼容ASCII码

张小飞:怎么能证明一个汉字占用两个字节呢?


诸小亮:这简单,打开记事本,随便输入几个字,比如:


然后,另存为


保存的时候可以选择编码方式:



保存后查看文件属性:

张小飞:嗯嗯,明白了

4. Unicode

张小飞:这 Unicode 什么样的编码表?

诸小亮:Unicode(统一码),也叫万国码,是一种编码规范

张小飞:规范?

诸小亮:世界上存在很多编码方式,同一个二进制数在不同国家被解释成不同的含义,这及其不利于国际化,因此 Unicode 诞生了,目的:统一编码方式,它为每种语言中的每个字符设定了统一并且唯一的二进制编码

张小飞:那,这用处应该很广泛吧

诸小亮:没错,随着互联网的普及,强烈要求出现一种统一的编码方式,目前最流行的是——UTF-8

张小飞:您刚才还在说 Unicode,怎么又变成 UTF-8 了?

诸小亮:刚才说了,Unicode 只是一种规范,而 UTF-8是Unicode的实现方式之一

张小飞:哦哦,这么说还有其他实现方式?

诸小亮:还包括UTF-16和UTF-32,不过一般不用,咱们之说最流行的——UTF-8

张小飞:了解,那么如果是 UTF-8 编码,一个汉字多大?

诸小亮:针对中文,根据 UTF-8,一个汉字占用 3 个字节,比如:


保存后查看文件属性:

张小飞:明白了

2. String 中的编码

张小飞:这编码跟 String 有什么关系?

诸小亮:当然有关系了,编码就是用来处理各种字符或符号的,String 就是由各种字符或符合组成的,举个例子吧,可以用指定的编码方式把字符串转换为字节数组

public static void main(String[] args) throws Exception {
    String s = "妲己";
    byte[] arr = s.getBytes("GBK");
    System.out.println(arr);
}

结果:


另外,很多情况下需要把字节数组转换为字符串,比如:

public static void main(String[] args) throws Exception {
    String s = "妲己";
    byte[] arr = s.getBytes("GBK");//这称为:编码
    System.out.println(new String(arr,"GBK"));//字节数组转为字符串,这称为:解码
}


张小飞:为什么我这里是 6 个字节?

诸小亮:因为你调用 getBytes 方法时,没有指定编码方式,所以这时候用的是默认编码

张小飞:默认编码是 UTF-8 吗?

诸小亮:在 idea 中是我们自己设置的,比如:


如果全部改成 GBK

注意:工作中一般都是UTF-8的编码方式


张小飞:嗯嗯,明白了


诸小亮:另外,如果编码设置的不对,会产生乱码,比如:

结果:

张小飞:也就是说,编码和解码的方式得对应

诸小亮:完全正确

展开阅读全文

页面更新:2024-02-20

标签:字符串   汉字   码表   数组   中文   字节   符号   字符   语言   方式   张小飞

1 2 3 4 5

上滑加载更多 ↓
推荐阅读:
友情链接:
更多:

本站资料均由网友自行发布提供,仅用于学习交流。如有版权问题,请与我联系,QQ:4156828  

© CopyRight 2020-2024 All Rights Reserved. Powered By 71396.com 闽ICP备11008920号-4
闽公网安备35020302034903号

Top