前情提要:
我们不推崇个人英雄主义,但英雄,却值得我们崇拜和铭记。
作者主页: 追光者♂
个人简介:
[1] 计算机专业硕士研究生
[2] 2022年度博客之星人工智能领域TOP4
[3] 阿里云社区特邀专家博主
[4] CSDN-人工智能领域优质创作者
[5] 预期2023年10月份 · 准CSDN博客专家
- 无限进步,一起追光!!!
感谢大家 点赞 收藏⭐ 留言!!!
本篇主要介绍常见字符集的拓展知识,旨在帮助大家开拓视野。从编码和解码讲起,然后介绍了常见的字符集,如ASCII码、 ISO-8859-1字符集、GBxxx字符集、Unicode码和UTF-8等字符集,本篇较为详细地介绍了这些字符集的知识,但仍然存在不足,希望大家理解。第二部分给出条件运算符的实例code以及测试输出和简析。有帮助的话,点个赞吧!
计算机中储存的信息都是用二进制数
表示的,而我们在屏幕上看到的数字、英文、标点符号、汉字等字符是二进制数转换之后的结果。按照某种规则,将字符存储到计算机中,称为编码
。反之,将存储在计算机中的二进制数按照某种规则解析显示出来,称为解码
。
字符编码(Character Encoding) : 就是一套自然语言的字符与二进制数之间的对应规则。
字符集:也叫编码表。是一个系统支持的所有字符的集合,包括各国家文字、标点符号、图形符号、数字等。
字符集(Character Set),也称字符编码(Character Encoding),是一种 将字符与二进制数据 之间进行映射的规则或标准。在计算机系统中,所有的字符都是以二进制形式存储和处理的,字符集规定了字符与对应的二进制编码之间的关系。
下面是一些常见的字符集及其简介:(下面也会介绍~)
ASCII(American Standard Code for Information Interchange,美国信息交换标准代码):ASCII字符集是最早的字符集之一,使用7位二进制编码来表示128个字符。它包含了基本拉丁字母、数字、标点符号和一些控制字符。
UTF-8(Unicode Transformation Format-8,8位Unicode转换格式):UTF-8是一种变长编码,可以表示Unicode字符集中的所有字符。它使用8位二进制编码,兼容ASCII字符集,并能够表示更多的字符。UTF-8是互联网上最常用的字符集之一。
Unicode(统一码、万国码):Unicode字符集包含了世界上几乎所有的字符,包括各种语言的字母、符号、表情符号等。它采用固定长度的编码方式,常见的编码方式有UTF-8、UTF-16等。
ISO-8859(国际标准化组织8859标准):ISO-8859是一系列字符集标准,每个标准定义了一种特定语言的字符集。ISO-8859-1是其中最常见的字符集,也称为Latin-1,它包含了西欧语言的字符。
GB2312(国标2312):GB2312是中国国家标准规定的汉字字符集,它使用两个字节来编码汉字字符,并包含了基本的拉丁字母和符号。
GBK(汉字内码扩展规范):GBK是对GB2312的扩展,它包含了更多的汉字字符。
Big5(繁体中文字符集):Big5是用于繁体中文的字符集,主要用于台湾地区。
以上这些是常见的字符集(之一),不同的字符集适用于不同的应用场景
。在选择字符集时,需要考虑到所需编码的字符范围、语言要求、系统兼容性以及应用环境等因素。
American Standard Code for Information Interchange,美国信息交换标准代码
):上个世纪60年代,美国制定了一套字符编码,对英语字符
与二进制位之间的关系,做了统一规定。这被称为ASCII码。128个
字符。比如:空格“SPACE”是32(二进制00100000),大写的字母A是65(二进制01000001)。补充介绍:
ASCII码使用7位二进制编码(0-127),可以表示128个字符,包括基本的拉丁字母、数字、标点符号和一些控制字符。
以下是ASCII码的一些特点和范围:
字符范围:ASCII码定义了128个字符,其中包括33个不可打印的控制字符和95个可打印字符。
控制字符:控制字符主要用于控制设备和通信,如换行符(LF)、回车符(CR)、制表符(Tab)等。
可打印字符:可打印字符包括基本的拉丁字母(大写和小写)、数字、标点符号(如逗号、句号、感叹号等)、特殊符号(如美元符号、百分号等)。
编码方式:每个字符对应一个唯一的编码值,使用7位二进制表示,范围从0000000(0)到1111111(127)。
扩展字符集:由于只使用7位二进制,因此ASCII码无法表示非英文字符和更多的特殊符号。后来的字符集如ISO-8859和Unicode提供了扩展字符集来满足不同语言和字符的需求。
ASCII码的应用广泛,特别是在计算机系统、通信和文件传输中常常使用。ASCII码为字符赋予了唯一的标识,使得计算机能够正确地存储、传输和处理文本数据。
需要注意的是,ASCII码 在国际化和多语言环境下的局限性越来越明显。为了表示更多的字符和语言,Unicode及其变种如UTF-8等字符集得到了广泛应用,成为了现代计算机系统中常用的字符编码方式。
补充知识:
ISO-8859-1,也称为Latin-1,是国际标准化组织(ISO)定义的字符集标准之一。它是ISO-8859系列中的第一个字符集,涵盖了欧洲常见的语言,特别是用拉丁字母编写的西欧语言。
以下是关于ISO-8859-1字符集的一些特点:
字符范围:ISO-8859-1定义了256个字符,使用8位二进制编码(0-255)。
包含字符:ISO-8859-1包含了基本的拉丁字母(大写和小写)、数字、标点符号和一些特殊符号(如欧元符号、版权符号等)。
与ASCII码的关系:ISO-8859-1是ASCII码的扩展,其中的前128个字符与ASCII码保持一致。因此,ASCII码的范围是ISO-8859-1的一部分。
跨语言支持:ISO-8859-1主要用于支持包含法语、西班牙语、德语等语言的内容,这些语言使用拉丁字母。
需要注意的是,ISO-8859-1字符集虽然是一种常见的字符集,但它仅覆盖了欧洲语言中的一小部分字符。对于其他语言,如亚洲的中文、日文和韩文等,以及其他特殊字符,ISO-8859-1是无法表示的。
随着计算机全球化和多语言环境的发展,Unicode和其变种如UTF-8 逐渐取代了ISO-8859-1作为 更全面和兼容性更好的字符编码方案。Unicode能够表示几乎所有的字符,并且通过UTF-8编码方案,能够兼容ISO-8859-1的前128个字符。
显示中文
而设计的一套字符集。7000多个简体汉字
,此外数学符号、罗马希腊的字母、日文的假名们都编进去了,这就是常说的"全角"字符,而原来在127号以下的那些符号就叫"半角"字符了。双字节
编码方案,共收录了21003个
汉字,完全兼容GB2312标准,同时支持繁体汉字
以及日韩汉字等。70244个
,采用多字节
编码,每个字可以由1个、2个或4个字节组成。支持中国国内少数民族的文字,同时支持繁体汉字以及日韩汉字等。补充介绍:
GBxxx字符集是中国国家标准规定的汉字字符集,用于表示中文字符。以下是几个常见的GB字符集及其简介:
GB2312(国标2312):GB2312是中国国家标准规定的汉字字符集,于1980年发布。它使用两个字节编码,其中第一个字节范围是0xB0 - 0xF7
,第二个字节范围是0xA1 - 0xFE
,共收录了约7000多个常用汉字以及包括拉丁字母、数字、标点符号等在内的其他字符。
GBK(汉字内码扩展规范):GBK是GB2312的扩展字符集,于1995年发布。它在兼容GB2312的基础上,新增收录了约21000个汉字,包括繁体字、生僻字等。
GB18030(汉字内码扩展规范):GB18030是GB系列中最新的字符集标准,于2000年发布。它在兼容GBK的基础上,进一步扩展以支持所有已知的汉字字符,包括中国少数民族文字、日文字、韩文字等。
这些GB字符集被广泛应用于中国及其周边地区的计算机系统、操作系统、数据库等领域。它们为中文字符的存储、处理和交换提供了标准化的解决方案。
需要注意的是,GB字符集主要适用于简体中文和繁体中文的字符表示,对于其他语言的字符,如拉丁字母、日语假名、韩文等,GB字符集是无法表示的。对于更全面和国际化的字符表示,Unicode及其变种如UTF-8成为了更常用和广泛支持的字符编码方式。
Unicode编码为表达任意语言的任意字符
而设计,也称为统一码、标准万国码。Unicode 将世界上所有的文字用2个字节
统一进行编码,为每个字符设定唯一的二进制编码,以满足跨语言、跨平台进行文本处理的要求。
Unicode 的缺点:这里有三个问题:
极大的浪费
。区别Unicode和ASCII
?计算机怎么知道两个字节表示一个符号,而不是分别表示两个符号呢?不够表示所有字符
。Unicode在很长一段时间内无法推广,直到互联网的出现,为解决Unicode如何在网络上传输的问题,于是面向传输的众多 UTF(UCS Transfer Format)标准出现。具体来说,有三种编码方案,UTF-8、UTF-16和UTF-32。
补充说明:
Unicode码 是一种全球通用的字符编码标准,用于表示世界上几乎所有的字符,包括各国文字、符号、标点符号、特殊符号等。Unicode的目标是为不同语言、文化和技术提供统一的字符表示方法,使得任何计算机系统都能够正确地处理和显示多语言的文本数据。
下面是关于Unicode码的一些特点和重要概念:
字符表示范围:Unicode定义了超过1.1万多个字符,其中包括了几乎所有世界上已知的字符和符号。
编码方式:Unicode使用16位或32位二进制编码来表示每个字符。最常用的编码方式是UTF-16(16位编码)和UTF-8(8位编码),它们可以将 Unicode中的字符映射为对应的二进制序列。
扩展字符集:Unicode不仅包括 基本拉丁字母、拉丁字母扩展、希腊字母、西里尔字母等常见字符,还支持其他语言、符号和特殊字符。Unicode通过多个扩展标准(如Unicode增补区、Unicode补充字符等)来添加更多的字符。
兼容性:Unicode被设计为 兼容现有的字符编码标准(如ASCII码、ISO-8859等),使得这些编码中的字符可以直接映射到Unicode中相同的编码位置,保证了向后兼容性。
Unicode的广泛应用 使得不同国家和地区的人们 能够在计算机上交流和共享信息,无论是在操作系统、应用程序、Web页面还是数据库中。
它为程序员、开发人员和设计师 提供了统一的字符处理方法,避免了字符转换和乱码问题
。
需要注意的是,由于Unicode码的大规模,单纯使用Unicode存储和传输文本可能会占用较多的存储空间和带宽。因此,
UTF-8编码成为了一种常用的Unicode编码方式,它能够以变长的形式表示Unicode字符,并在保证兼容性的同时减小了存储和传输的开销
。
将数字转换到程序数据
的编码方案。顾名思义,UTF-8就是每次8个位传输数据,而UTF-16就是每次16个位。其中,UTF-8 是在互联网上使用最广
的一种 Unicode 的实现方式。变长的编码方式
。它可以使用 1-4 个字节表示一个符号它使用一至四个字节为每个字符编码,编码规则:
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的一些特点和重要概念:
可变长度编码:UTF-8使用1到4个字节来表示不同的字符。基本的ASCII字符(U+0000 至 U+007F)使用单个字节表示,而其他字符根据其Unicode码点采用多字节进行编码。
兼容ASCII:UTF-8是一种兼容ASCII标准的编码方式。ASCII字符在UTF-8中使用一个字节编码,因此,所有的ASCII文本在UTF-8中保持不变,同时也能够容纳各种语言的ASCII字符。
可变长性:UTF-8能够根据字符的具体需求动态分配所需的字节数。这使得UTF-8在存储和传输文本时,能够有效地使用和节约空间。与其他固定长度的Unicode编码方式相比,UTF-8能够根据文本中字符的实际情况进行灵活编码,减小了开销。
多语言支持:UTF-8能够表示几乎所有的Unicode字符,包括世界上的各种语言、符号、表情符号、特殊符号等。它被广泛应用于各种计算机系统、操作系统、Web页面、数据库等领域,提供了国际化和多语言支持。
需要注意的是,UTF-8在存储大多数 非拉丁语系的字符时 会占用更多的字节数,因为这些字符 需要使用多个字节进行编码。尽管如此,UTF-8仍然是目前最常用的Unicode编码方式,因为它的兼容性、灵活性和可节省空间的特点。
简言之,UTF-8是一种灵活、节省空间且广泛应用的Unicode字符编码方式,它能够表示几乎所有的Unicode字符,并提供了国际化和多语言的支持。
/*
测试运算符的使用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);
}
}
简析:
上述代码是一个 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
得到 i
和 j
中较大的值,然后再将较大值与 k
进行比较,得到最终的最大值。然后,在控制台打印出最大值。
值得一提的是,代码中还包含了一个不推荐的方式来合并求最大值的写法:
int finalMax1 = (((i > j)? i : j) > k)? ((i > j)? i : j) : k;
System.out.println(finalMax1);
需要指出,这种写法虽然有效,但是可读性较差。因此,在实际开发中,建议使用嵌套的条件表达式来表达逻辑更加清晰的代码。
热门专栏推荐:
持续创作优质好文ing…✍✍✍
记得一键三连哦!!!
求关注!求点赞!求个收藏啦!