java基础-ascii编码

简介: java基础-ascii编码

前言


小伙伴们,你们好呀!我是老寇!


我们都知道计算机只能理解二进制码,一个二进制位(bit)只有0或1两种状态,而一个字节(byte)由8个二进制位组成,因此有256种组合,即00000000 ~ 111111111。


ASCII编码是美国制定的一套字符编码,对英文的字符和二进制位之间的关系,做了统一规定,沿用至今。


ASCII编码一共规定了128个字符,包括阿拉伯数字、大小写字母、其他字符(空格、换行.....)


48~57为0到9十个阿拉伯数字: '0'~'9'

65~90为26个大写英文字母 :'A'~'Z'

97~122号为26个小写英文字母:'a'~'z'

之所以只有128个字符,是因为最前面的一位统一规定为 0


如果是使用英语是没有问题,但是欧洲的一些不使用英语的国家,却发现128个字符不够用,又扩展了一些字符,加入一些带重音的字符、希腊字母等等字符加进去,由原本 0 最高位改成 1


拓展出来了128个二进制数,即10000000 ~ 111111111,从而涵盖基本的西欧语言。


说到这里,厉害啦我的国,中国NB!


随着使用计算机的国家越来越多,ascii编码不能满足我们汉语的需要,需要扩展字符集,因此国家标准总局发布了一套国家标准,也就是gb2312(简体中文),后面又加入了生僻字、繁体字等等,就有了后面的gbk字符集。gbk又是向下兼容gb2312。


每个国家都有一套自己的编码系统,通过编码和解码出来的字符五花八门,出现了乱码的情况,因此,为了实现跨语言、跨平台的文本转换和处理需求,ISO国际标准化组织提出了Unicode的新标准,Unicode字符集涵盖了世界上所有的文字和符号字符,Unicode编码为字符集中的每一个字符指定了唯一的二进制编码,彻底解决之前不同编码系统的冲突和乱码问题。


正文


我们一起看个程序


public class Ascii {
    public static void main(String[] args) {
        char c = 23495;
        System.out.println("Unicode编码:" + c);
        char chinese = '寇';
        int number = chinese;
        System.out.println("中文的Unicode码:" + number);
        char upper = 'A';
        number = upper;
        System.out.println("大写字母的ASCII码:" + number);
        char lower = 'a';
        number = lower;
        System.out.println("小写字母的ASCII码:" + number);
        char num = '0';
        number = num;
        System.out.println("数字的ASCII码:" + number);
        System.out.println("Unicode码为23495,强制类型转换为" + (char)23495);
        System.out.println("ASCII码为65,强制类型转换为" + (char)65);
        System.out.println("ASCII码为97,强制类型转换为" + (char)97);
        System.out.println("ASCII码为48,强制类型转换为" + (char)48);
        //char向上兼容int,因此'c'和'a'会转成int再进行计算
        System.out.println("'c'减去'a':" + ('c' - 'a'));
    }
}


Unicode编码:寇

中文的Unicode码:23495

大写字母的ASCII码:65

小写字母的ASCII码:97

数字的ASCII码:48

Unicode码为23495,强制类型转换为寇

ASCII码为65,强制类型转换为A

ASCII码为97,强制类型转换为a

ASCII码为48,强制类型转换为0

'c'减去'a':2


运行结果分析:每个字符都有唯一对应的编码值,而char转换为int类型,不需要强制类型转换,而int转为char需要强制类型转换。


byte 取值范围:-2^8 ~ 2^8-1,即 -128 ~ 127


char 取值范围: 0 ~ 65535


int  取值范围:  -2^31 ~ 2^31-1,即 -2147483648 ~ 2147483647


=> int > char,因此char能够向上兼容int,但是int要强制类型转换为char。


说到这里,你们可能就有疑问啦,为什么char可以存汉字?这是因为char是按照字符存储的,不管英文还是中文,固定占用占用2个字节,用来储存Unicode字符。范围在0~65536。


c语言说的char类型与我们java的byte类型是一致的


补充:char是有16个二进制位,2个字节,希望大家不要与c语言的char类型弄混淆啦


结论:如果是做算法题并且只有字母的情况下,完全没有必要开辟256,这样做会造成资源浪费,通过减'a'的方式,将数组长度缩小到26


技巧:求重复数字可以通过arr[i]++方式来做,arr[i]++  => arr[i] = arr[i] + 1,arr[i]能够充当临时变量


目录
相关文章
|
30天前
|
Java
Java开发实现图片URL地址检验,如何编码?
【10月更文挑战第14天】Java开发实现图片URL地址检验,如何编码?
61 4
|
26天前
|
Java
Java实现随机生成某个省某个市的身份证号?如何编码?
【10月更文挑战第18天】Java实现随机生成某个省某个市的身份证号?如何编码?
96 5
|
30天前
|
Java
Java开发实现图片地址检验,如果无法找到资源则使用默认图片,如何编码?
【10月更文挑战第14天】Java开发实现图片地址检验,如果无法找到资源则使用默认图片,如何编码?
56 2
|
3月前
|
安全 Java API
告别繁琐编码,拥抱Java 8新特性:Stream API与Optional类助你高效编程,成就卓越开发者!
【8月更文挑战第29天】Java 8为开发者引入了多项新特性,其中Stream API和Optional类尤其值得关注。Stream API对集合操作进行了高级抽象,支持声明式的数据处理,避免了显式循环代码的编写;而Optional类则作为非空值的容器,有效减少了空指针异常的风险。通过几个实战示例,我们展示了如何利用Stream API进行过滤与转换操作,以及如何借助Optional类安全地处理可能为null的数据,从而使代码更加简洁和健壮。
109 0
|
1月前
|
存储 缓存 Java
java基础:IO流 理论与代码示例(详解、idea设置统一utf-8编码问题)
这篇文章详细介绍了Java中的IO流,包括字符与字节的概念、编码格式、File类的使用、IO流的分类和原理,以及通过代码示例展示了各种流的应用,如节点流、处理流、缓存流、转换流、对象流和随机访问文件流。同时,还探讨了IDEA中设置项目编码格式的方法,以及如何处理序列化和反序列化问题。
67 1
java基础:IO流 理论与代码示例(详解、idea设置统一utf-8编码问题)
|
2月前
|
安全 Java API
【Java面试题汇总】Java基础篇——String+集合+泛型+IO+异常+反射(2023版)
String常量池、String、StringBuffer、Stringbuilder有什么区别、List与Set的区别、ArrayList和LinkedList的区别、HashMap底层原理、ConcurrentHashMap、HashMap和Hashtable的区别、泛型擦除、ABA问题、IO多路复用、BIO、NIO、O、异常处理机制、反射
【Java面试题汇总】Java基础篇——String+集合+泛型+IO+异常+反射(2023版)
|
2月前
|
存储 移动开发 Java
java核心之字符串与编码
java核心之字符串与编码
21 2
|
3月前
|
Java
Java系列之:字符串UTF-8 编码格式转换位 UTF-32 【生僻字截取问题】
这篇文章讨论了在Java中处理包含生僻字的字符串时可能遇到的问题,并提供了一种解决方法:将字符串的编码格式从UTF-8转换为UTF-32,以确保每个字符都占用固定的字节数,从而避免在截取操作中破坏字符,示例代码展示了如何进行编码转换和字符串截取。
|
3月前
|
存储 安全 Java
"Java编码魔法:揭秘图片与文件的Base64神秘转换术,让数据在指尖跳跃!"
【8月更文挑战第16天】Base64编码在Java开发中常用于将二进制数据如图片转换为ASCII字符串以便传输。编码使用64个字符及等号填充,每3字节数据编码为4个字符。Java利用`java.util.Base64`类实现此功能:读取图片或文件为字节数组后进行编码。解码时将Base64字符串还原为字节数组并写入文件。需注意编码效率降低、不提供安全性及特殊字符兼容性等问题。掌握这些技巧有助于解决Web开发中的数据传输需求。
96 4
|
3月前
|
Java
Java——编码GBK的不可映射字符
Java——编码GBK的不可映射字符
44 1