【2023,学点儿新Java-47】常见字符集介绍:ASCII码、 ISO-8859-1字符集、GBxxx字符集、Unicode码的缺陷、UTF-8 | 补充:条件运算符的练习

2023-07-23 07:43:55

前情提要:

 
我们不推崇个人英雄主义,但英雄,却值得我们崇拜和铭记。

 

🎯作者主页: 追光者♂🔥

        

🌸个人简介:
 
💖[1] 计算机专业硕士研究生💖
 
🌟[2] 2022年度博客之星人工智能领域TOP4🌟
 
🏅[3] 阿里云社区特邀专家博主🏅
 
🏆[4] CSDN-人工智能领域优质创作者🏆
 
📝[5] 预期2023年10月份 · 准CSDN博客专家📝  
 

  • 无限进步,一起追光!!!

        

🍎感谢大家 点赞👍  收藏⭐   留言📝!!!

        

🌿本篇主要介绍常见字符集的拓展知识,旨在帮助大家开拓视野。从编码和解码讲起,然后介绍了常见的字符集,如ASCII码、 ISO-8859-1字符集、GBxxx字符集、Unicode码和UTF-8等字符集,本篇较为详细地介绍了这些字符集的知识,但仍然存在不足,希望大家理解。第二部分给出条件运算符的实例code以及测试输出和简析。有帮助的话,点个赞吧!

💥一、字符集【拓展知识】

🦩1.1 简介

  • 编码与解码

计算机中储存的信息都是用二进制数表示的,而我们在屏幕上看到的数字、英文、标点符号、汉字等字符是二进制数转换之后的结果。按照某种规则,将字符存储到计算机中,称为编码 。反之,将存储在计算机中的二进制数按照某种规则解析显示出来,称为解码

  • 字符编码(Character Encoding) : 就是一套自然语言的字符与二进制数之间的对应规则。

  • 字符集:也叫编码表。是一个系统支持的所有字符的集合,包括各国家文字、标点符号、图形符号、数字等。


字符集(Character Set),也称字符编码(Character Encoding),是一种 将字符与二进制数据 之间进行映射的规则或标准。在计算机系统中,所有的字符都是以二进制形式存储和处理的,字符集规定了字符与对应的二进制编码之间的关系。

下面是一些常见的字符集及其简介:(下面也会介绍~)

  1. ASCII(American Standard Code for Information Interchange,美国信息交换标准代码):ASCII字符集是最早的字符集之一,使用7位二进制编码来表示128个字符。它包含了基本拉丁字母、数字、标点符号和一些控制字符。

  2. UTF-8(Unicode Transformation Format-8,8位Unicode转换格式):UTF-8是一种变长编码,可以表示Unicode字符集中的所有字符。它使用8位二进制编码,兼容ASCII字符集,并能够表示更多的字符。UTF-8是互联网上最常用的字符集之一。

  3. Unicode(统一码、万国码):Unicode字符集包含了世界上几乎所有的字符,包括各种语言的字母、符号、表情符号等。它采用固定长度的编码方式,常见的编码方式有UTF-8、UTF-16等。

  4. ISO-8859(国际标准化组织8859标准):ISO-8859是一系列字符集标准,每个标准定义了一种特定语言的字符集。ISO-8859-1是其中最常见的字符集,也称为Latin-1,它包含了西欧语言的字符。

  5. GB2312(国标2312):GB2312是中国国家标准规定的汉字字符集,它使用两个字节来编码汉字字符,并包含了基本的拉丁字母和符号。

  6. GBK(汉字内码扩展规范):GBK是对GB2312的扩展,它包含了更多的汉字字符。

  7. Big5(繁体中文字符集):Big5是用于繁体中文的字符集,主要用于台湾地区。

以上这些是常见的字符集(之一),不同的字符集适用于不同的应用场景在选择字符集时,需要考虑到所需编码的字符范围、语言要求、系统兼容性以及应用环境等因素。

🦩1.2 ASCII码

  • ASCII码American Standard Code for Information Interchange,美国信息交换标准代码):上个世纪60年代,美国制定了一套字符编码,对英语字符与二进制位之间的关系,做了统一规定。这被称为ASCII码。
  • ASCII码用于显示现代英语,主要包括控制字符(回车键、退格、换行键等)和可显示字符(英文大小写字符、阿拉伯数字和西文符号)。
  • 基本的ASCII字符集,使用7位(bits)表示一个字符(最前面的1位统一规定为0),共128个字符。比如:空格“SPACE”是32(二进制00100000),大写的字母A是65(二进制01000001)。
  • 缺点:不能表示所有字符。

在这里插入图片描述


补充介绍:

ASCII码使用7位二进制编码(0-127),可以表示128个字符,包括基本的拉丁字母、数字、标点符号和一些控制字符。

以下是ASCII码的一些特点和范围:

  1. 字符范围:ASCII码定义了128个字符,其中包括33个不可打印的控制字符和95个可打印字符。

  2. 控制字符:控制字符主要用于控制设备和通信,如换行符(LF)、回车符(CR)、制表符(Tab)等。

  3. 可打印字符:可打印字符包括基本的拉丁字母(大写和小写)、数字、标点符号(如逗号、句号、感叹号等)、特殊符号(如美元符号、百分号等)。

  4. 编码方式:每个字符对应一个唯一的编码值,使用7位二进制表示,范围从0000000(0)到1111111(127)。

  5. 扩展字符集:由于只使用7位二进制,因此ASCII码无法表示非英文字符和更多的特殊符号。后来的字符集如ISO-8859和Unicode提供了扩展字符集来满足不同语言和字符的需求。

ASCII码的应用广泛,特别是在计算机系统、通信和文件传输中常常使用。ASCII码为字符赋予了唯一的标识,使得计算机能够正确地存储、传输和处理文本数据。

需要注意的是,ASCII码 在国际化和多语言环境下的局限性越来越明显。为了表示更多的字符和语言,Unicode及其变种如UTF-8等字符集得到了广泛应用,成为了现代计算机系统中常用的字符编码方式。

🦩1.3 ISO-8859-1字符集

  • 拉丁码表,别名Latin-1,用于显示欧洲使用的语言,包括荷兰语、德语、意大利语、葡萄牙语等。
  • ISO-8859-1使用单字节编码,兼容ASCII编码。

补充知识:

ISO-8859-1,也称为Latin-1,是国际标准化组织(ISO)定义的字符集标准之一。它是ISO-8859系列中的第一个字符集,涵盖了欧洲常见的语言,特别是用拉丁字母编写的西欧语言。

以下是关于ISO-8859-1字符集的一些特点:

  1. 字符范围:ISO-8859-1定义了256个字符,使用8位二进制编码(0-255)。

  2. 包含字符:ISO-8859-1包含了基本的拉丁字母(大写和小写)、数字、标点符号和一些特殊符号(如欧元符号、版权符号等)。

  3. 与ASCII码的关系:ISO-8859-1是ASCII码的扩展,其中的前128个字符与ASCII码保持一致。因此,ASCII码的范围是ISO-8859-1的一部分。

  4. 跨语言支持:ISO-8859-1主要用于支持包含法语、西班牙语、德语等语言的内容,这些语言使用拉丁字母。

需要注意的是,ISO-8859-1字符集虽然是一种常见的字符集,但它仅覆盖了欧洲语言中的一小部分字符。对于其他语言,如亚洲的中文、日文和韩文等,以及其他特殊字符,ISO-8859-1是无法表示的。

随着计算机全球化和多语言环境的发展,Unicode和其变种如UTF-8 逐渐取代了ISO-8859-1作为 更全面和兼容性更好的字符编码方案。Unicode能够表示几乎所有的字符,并且通过UTF-8编码方案,能够兼容ISO-8859-1的前128个字符。

 

🦩1.4 GBxxx字符集

  • GB就是国标的意思,是为了显示中文而设计的一套字符集。
  • GB2312:简体中文码表。一个小于127的字符的意义与原来相同,即向下兼容ASCII码。但两个大于127的字符连在一起时,就表示一个汉字,这样大约可以组合了包含7000多个简体汉字,此外数学符号、罗马希腊的字母、日文的假名们都编进去了,这就是常说的"全角"字符,而原来在127号以下的那些符号就叫"半角"字符了。
  • GBK:最常用的中文码表。是在GB2312标准基础上的扩展规范,使用了双字节编码方案,共收录了21003个汉字,完全兼容GB2312标准,同时支持繁体汉字以及日韩汉字等。
  • GB18030:最新的中文码表。收录汉字70244个,采用多字节编码,每个字可以由1个、2个或4个字节组成。支持中国国内少数民族的文字,同时支持繁体汉字以及日韩汉字等。

补充介绍:

GBxxx字符集是中国国家标准规定的汉字字符集,用于表示中文字符。以下是几个常见的GB字符集及其简介:

  1. GB2312(国标2312):GB2312是中国国家标准规定的汉字字符集,于1980年发布。它使用两个字节编码,其中第一个字节范围是0xB0 - 0xF7,第二个字节范围是0xA1 - 0xFE,共收录了约7000多个常用汉字以及包括拉丁字母、数字、标点符号等在内的其他字符。

  2. GBK(汉字内码扩展规范):GBK是GB2312的扩展字符集,于1995年发布。它在兼容GB2312的基础上,新增收录了约21000个汉字,包括繁体字、生僻字等。

  3. GB18030(汉字内码扩展规范):GB18030是GB系列中最新的字符集标准,于2000年发布。它在兼容GBK的基础上,进一步扩展以支持所有已知的汉字字符,包括中国少数民族文字、日文字、韩文字等。

这些GB字符集被广泛应用于中国及其周边地区的计算机系统、操作系统、数据库等领域。它们为中文字符的存储、处理和交换提供了标准化的解决方案。

需要注意的是,GB字符集主要适用于简体中文和繁体中文的字符表示,对于其他语言的字符,如拉丁字母、日语假名、韩文等,GB字符集是无法表示的。对于更全面和国际化的字符表示,Unicode及其变种如UTF-8成为了更常用和广泛支持的字符编码方式。

 

🦩1.5 Unicode码

  • Unicode编码为表达任意语言的任意字符而设计,也称为统一码、标准万国码。Unicode 将世界上所有的文字用2个字节统一进行编码,为每个字符设定唯一的二进制编码,以满足跨语言、跨平台进行文本处理的要求。

  • Unicode 的缺点:这里有三个问题:

    • 第一,英文字母只用一个字节表示就够了,如果用更多的字节存储是极大的浪费
    • 第二,如何才能区别Unicode和ASCII?计算机怎么知道两个字节表示一个符号,而不是分别表示两个符号呢?
    • 第三,如果和GBK等双字节编码方式一样,用最高位是1或0表示两个字节和一个字节,就少了很多值无法用于表示字符,不够表示所有字符
  • Unicode在很长一段时间内无法推广,直到互联网的出现,为解决Unicode如何在网络上传输的问题,于是面向传输的众多 UTF(UCS Transfer Format)标准出现。具体来说,有三种编码方案,UTF-8、UTF-16和UTF-32。

补充说明:

Unicode码 是一种全球通用的字符编码标准,用于表示世界上几乎所有的字符,包括各国文字、符号、标点符号、特殊符号等。Unicode的目标是为不同语言、文化和技术提供统一的字符表示方法,使得任何计算机系统都能够正确地处理和显示多语言的文本数据。

下面是关于Unicode码的一些特点和重要概念:

  1. 字符表示范围Unicode定义了超过1.1万多个字符,其中包括了几乎所有世界上已知的字符和符号。

  2. 编码方式:Unicode使用16位或32位二进制编码来表示每个字符。最常用的编码方式是UTF-16(16位编码)和UTF-8(8位编码),它们可以将 Unicode中的字符映射为对应的二进制序列。

  3. 扩展字符集:Unicode不仅包括 基本拉丁字母、拉丁字母扩展、希腊字母、西里尔字母等常见字符,还支持其他语言、符号和特殊字符。Unicode通过多个扩展标准(如Unicode增补区、Unicode补充字符等)来添加更多的字符。

  4. 兼容性:Unicode被设计为 兼容现有的字符编码标准(如ASCII码、ISO-8859等),使得这些编码中的字符可以直接映射到Unicode中相同的编码位置,保证了向后兼容性。

Unicode的广泛应用 使得不同国家和地区的人们 能够在计算机上交流和共享信息,无论是在操作系统、应用程序、Web页面还是数据库中。它为程序员、开发人员和设计师 提供了统一的字符处理方法,避免了字符转换和乱码问题

需要注意的是,由于Unicode码的大规模,单纯使用Unicode存储和传输文本可能会占用较多的存储空间和带宽。因此,UTF-8编码成为了一种常用的Unicode编码方式,它能够以变长的形式表示Unicode字符,并在保证兼容性的同时减小了存储和传输的开销

🦩1.6 UTF-8

  • Unicode是字符集,UTF-8、UTF-16、UTF-32是三种将数字转换到程序数据的编码方案。顾名思义,UTF-8就是每次8个位传输数据,而UTF-16就是每次16个位。其中,UTF-8 是在互联网上使用最广的一种 Unicode 的实现方式。
  • 互联网工程工作小组(IETF)要求所有互联网协议都必须支持UTF-8编码。所以,我们开发Web应用,也要使用UTF-8编码。UTF-8 是一种变长的编码方式。它可以使用 1-4 个字节表示一个符号它使用一至四个字节为每个字符编码,编码规则:
    1. 128个US-ASCII字符,只需一个字节编码。
    2. 拉丁文等字符,需要二个字节编码。
    3. 大部分常用字(含中文),使用三个字节编码。
    4. 其他极少使用的Unicode辅助字符,使用四字节编码。
  • 举例

Unicode符号范围 | UTF-8编码方式

(十六进制)           | (二进制)

————————————————————|—–—–—–—–—–—–—–—–—–—–—–—–—–—–

0000 0000-0000 007F | 0xxxxxxx(兼容原来的ASCII)

0000 0080-0000 07FF | 110xxxxx 10xxxxxx

0000 0800-0000 FFFF | 1110xxxx 10xxxxxx 10xxxxxx

0001 0000-0010 FFFF | 11110xxx 10xxxxxx 10xxxxxx 10xxxxxx

在这里插入图片描述


注意:在中文操作系统上,ANSI(美国国家标准学会、AMERICAN NATIONAL STANDARDS INSTITUTE: ANSI)编码即为GBK;在英文操作系统上,ANSI编码即为ISO-8859-1。

在这里插入图片描述


补充介绍:

UTF-8(Unicode Transformation Format-8)是一种用于表示Unicode字符的可变长度字符编码方式。它是Unicode的一种具体实现,能够表示几乎所有的Unicode字符。

下面是UTF-8的一些特点和重要概念:

  1. 可变长度编码:UTF-8使用1到4个字节来表示不同的字符。基本的ASCII字符(U+0000 至 U+007F)使用单个字节表示,而其他字符根据其Unicode码点采用多字节进行编码。

  2. 兼容ASCII:UTF-8是一种兼容ASCII标准的编码方式。ASCII字符在UTF-8中使用一个字节编码,因此,所有的ASCII文本在UTF-8中保持不变,同时也能够容纳各种语言的ASCII字符。

  3. 可变长性:UTF-8能够根据字符的具体需求动态分配所需的字节数。这使得UTF-8在存储和传输文本时,能够有效地使用和节约空间。与其他固定长度的Unicode编码方式相比,UTF-8能够根据文本中字符的实际情况进行灵活编码,减小了开销。

  4. 多语言支持:UTF-8能够表示几乎所有的Unicode字符,包括世界上的各种语言、符号、表情符号、特殊符号等。它被广泛应用于各种计算机系统、操作系统、Web页面、数据库等领域,提供了国际化和多语言支持。

需要注意的是,UTF-8在存储大多数 非拉丁语系的字符时 会占用更多的字节数,因为这些字符 需要使用多个字节进行编码。尽管如此,UTF-8仍然是目前最常用的Unicode编码方式,因为它的兼容性、灵活性和可节省空间的特点。

简言之,UTF-8是一种灵活、节省空间且广泛应用的Unicode字符编码方式,它能够表示几乎所有的Unicode字符,并提供了国际化和多语言的支持。

 

💥二、条件运算符的练习

🦩2.1 实例code

/*
测试运算符的使用6:条件运算符

1. (条件表达式)? 表达式1 : 表达式2

2. 说明:
① 条件表达式的结果是boolean类型。
② 如果条件表达式的结果是true,则执行表达式1。否则,执行表达式2。
③ 表达式1 和 表达式2 需要是相同的类型或能兼容的类型。

④ 开发中,凡是可以使用条件运算符的位置,都可以改写为if-else。
          反之,能使用if-else结构,不一定能改写为条件运算符。
  
  建议,在二者都能使用的情况下,推荐使用条件运算符。因为执行效率稍高。

*/
class ConditionTest {
	public static void main(String[] args) {
		
		String info = (2 > 10)? "表达式1" : "表达式2";
		System.out.println(info);

		double result = (2 > 1)? 1 : 2.0;
		System.out.println(result);

		//练习1:获取两个整数的较大值
		int m = 10;
		int n = 20;

		int max = (m > n)? m : n;
		System.out.println("较大值为:" + max);

		//练习2:获取三个整数的最大值
		int i = 20;
		int j = 30;
		int k = 23;

		int tempMax = (i > j)? i : j;
		int finalMax = (tempMax > k)? tempMax : k;
		System.out.println(finalMax);

		//合并以后的写法:不推荐
		int finalMax1 = (((i > j)? i : j) > k)? ((i > j)? i : j) : k;
		System.out.println(finalMax1);
	}
}

🦩2.2 测试输出 & 简析

在这里插入图片描述

简析:

上述代码是一个 Java 程序,主要演示了条件运算符(三元运算符)的使用。

代码中的第一个示例是:

String info = (2 > 10)? "表达式1" : "表达式2";
System.out.println(info);

这里,条件表达式 (2 > 10) 的结果为 false,所以 info 的值将被赋为 "表达式2"。然后,在控制台打印出 info 的值,结果是 "表达式2"

第二个示例是:

double result = (2 > 1)? 1 : 2.0;
System.out.println(result);

这里,条件表达式 (2 > 1) 的结果为 true,所以 result 的值将被赋为 1。然后,在控制台打印出 result 的值,结果是 1.0

接下来的练习示例是 获取两个整数的较大值和三个整数的最大值。这两个示例都使用了条件表达式来比较和选择值。例如,在获取两个整数的较大值时:

int max = (m > n)? m : n;
System.out.println("较大值为:" + max);

这里,如果 m 大于 n,则 max 将被赋值为 m,反之则被赋值为 n。然后,在控制台打印出 "较大值为:" + max,显示出较大的那个整数。

最后一个示例 展示了对三个整数求最大值的情况。通过 嵌套使用条件表达式,可以比较 三个整数之间的大小 并得到最大值。例如:

int tempMax = (i > j)? i : j;
int finalMax = (tempMax > k)? tempMax : k;
System.out.println(finalMax);

这里,首先通过 (i > j)? i : j 得到 ij 中较大的值,然后再将较大值与 k 进行比较,得到最终的最大值。然后,在控制台打印出最大值。

值得一提的是,代码中还包含了一个不推荐的方式来合并求最大值的写法:

int finalMax1 = (((i > j)? i : j) > k)? ((i > j)? i : j) : k;
System.out.println(finalMax1);

需要指出,这种写法虽然有效,但是可读性较差。因此,在实际开发中,建议使用嵌套的条件表达式来表达逻辑更加清晰的代码。

 


 

🍒 热门专栏推荐

 

持续创作优质好文ing…✍✍✍

 

记得一键三连哦!!!

 

求关注!求点赞!求个收藏啦!

在这里插入图片描述

更多推荐

【Linux学习笔记】权限

1.普通用户和root用户权限之间的切换2.权限的三个w2.1.什么是权限(what)2.1.1.用户角色2.1.2.文件属性2.2.怎么操作权限呢?(how)2.2.1.ugo+-rwx方案2.2.2.八进制方案2.2.3.文件权限的初始模样2.2.4.进入一个目录,需要什么权限呢?2.3.为什么要有权限呢?(why

计算机毕业设计 基于SSM+Vue的校园短期闲置资源置换平台的设计与实现 Java实战项目 附源码+文档+视频讲解

博主介绍:✌从事软件开发10年之余,专注于Java技术领域、Python人工智能及数据挖掘、小程序项目开发和Android项目开发等。CSDN、掘金、华为云、InfoQ、阿里云等平台优质作者✌🍅文末获取源码联系🍅👇🏻精彩专栏推荐订阅👇🏻不然下次找不到哟————————————————计算机毕业设计题目《10

强化学习从基础到进阶--案例与实践[7.1]:深度确定性策略梯度DDPG算法、双延迟深度确定性策略梯度TD3算法详解项目实战

【强化学习原理+项目专栏】必看系列:单智能体、多智能体算法原理+项目实战、相关技巧(调参、画图等、趣味项目实现、学术应用项目实现专栏详细介绍:【强化学习原理+项目专栏】必看系列:单智能体、多智能体算法原理+项目实战、相关技巧(调参、画图等、趣味项目实现、学术应用项目实现对于深度强化学习这块规划为:基础单智能算法教学(g

01-初识HTML

01-初识HTML学习目标:理解HTML的基本语法掌握排版标签实现标题等效果相对路径和绝对路径媒体标签(图片、音频、视频)超链接一、基础认知了解网页组成和五大浏览器明确Web标准的构成1.1认识网页以下网页有哪些部分组成文字、图片、音频、视频、超链接…那么这个网页背后本质是什么?前端的代码是通过什么软件转换成用户眼中的

高精度地图定位在高速公路自动驾驶系统中的应用

【摘要】自动驾驶已经成为全球汽车产业的战略发展方向,其中L3级高速公路自动驾驶是最有可能率先落地的自动驾驶系统,高精度地图和定位系统是自动驾驶系统的关键一部分,近年来发展迅速,已经达到可量产状态。文章首先分析了自动驾驶和高精度地图定位的发展现状,然后,对高精度地图和定位系统在自动驾驶系统的地理围栏判定和感知冗余方面的应

Linux MQTT智能家居(MQTT框架)

文章目录前言一、MQTT通信框架二、心跳包三、项目中使用到的软件四、MQTT中服务器和客户端建立连接的步骤总结前言本篇文章将会讲解MQTT的框架,我们这个项目使用到的MQTT源码库来自于一位大佬编写。大佬博客主页:主页一、MQTT通信框架MQTT(MessageQueuingTelemetryTransport)是一种

OSI七层网络参考模型与数据流通过程

OSI七层网络参考模型文章目录OSI七层网络参考模型1.OSI参考模型初步了解2.OSI参考模型理解3.数据流通的过程1.OSI参考模型初步了解OSI,英文为OpenSystemInterconnect,意为开放式系统互连,国际化标准组织(ISO)指定了OSI模型,这个模型把网络通信的工作定义成7个框架,分别是物理层,

《java并发编程的艺术》读书笔记 1~2章

1.java并发基本概念1.1上下文切换实现原理:通过CPU时间片来实现这个机制。时间片是CPU分配给各个线程的时间,时间片非常短,CPU通过不停的切换线程执行,让我们感觉多个线程是同时执行的。CPU通过时间片分配算法来循环执行任务,当前任务执行一个时间片会切换到下一个任务,并保存上一个任务的状态,下次切换到这个任务时

day44 数据库查询命令

--isnull和isnotnull#1.查询没有上级领导的员工编号,姓名,工资selectempno,ename,salfromempwheremgrisnull;#2.查询emp表中没有奖金(comm)的员工姓名,工资,奖金selectename,sal,commfromempwherecommisnull;#3.

《Clean Code》

整洁代码文章目录一、命名1.1变量1.2函数Rule11.【推荐】先整体后细节1.3类二、格式三、条件语句四、对象和数据结构一、命名以业务为导向命名[operateMaxSaleQtyLogs]>以技术命名[operateMaxSaleQtyLogList]>随意命名[logList]1.1变量Rule1.【推荐】变量

面向组织分析的内容

声明本文是学习GB-T42859-2023航天产品质量问题三个面向分析方法实施要求.而整理的学习笔记,分享出来希望更多人受益,如果存在侵权请及时联系我们1范围本文件规定了航天产品质量问题三个面向分析方法实施的一般要求、程序和分析内容。本文件适用于承担航天产品研制任务的单位对质量问题从产品、流程、组织等角度开展分析和改进

热文推荐