【Java】知识——各类编码格式以及样例

news2024/11/20 14:18:49

一、 #ASCII 码

计算机内所有的信息都是二进制位。一个字节包含 8 个二进制位,可以表示 256 个状态,每个状态表示一个符号。
ASCII 码一共规定了128个字符的编码,比如空格 SPACE 是32(二进制00100000),大写的字母 A 是65(二进制01000001)。这128个符号(包括32个不能打印出来的控制符号)。ASCII 码只占用了一个字节的后面7位,最前面的一位统一规定为0。
在这里插入图片描述

二、非 ASCII 编码

英语用128个符号编码就够了,但是用来表示其他语言,128个符号是不够的。比如,在法语中,字母上方有注音符号,它就无法用 ASCII 码表示。于是,一些欧洲国家就决定,利用字节中闲置的最高位编入新的符号。比如,法语中的é的编码为130(二进制10000010)。这样一来,这些欧洲国家使用的编码体系,可以表示最多256个符号。
所有这些编码方式中,0-127表示的符号是一样的,不一样的只是128-255的这一段,不同的国家相同的 ASCII 码表示的可能是不同的符号。
至于亚洲国家的文字,使用的符号就更多了,汉字就多达10万左右。一个字节只能表示256种符号,肯定是不够的,就必须使用多个字节表达一个符号。比如,简体中文常见的编码方式是 GB2312 ,使用两个字节表示一个汉字,所以理论上最多可以表示 256 x 256 = 65536 个符号。

三、 #Unicode 字符集

将世界上多有文字都进行编码,就形成了 Unicode。Unicode 的规模可以容纳100多万个符号,每个符号的编码都不一样。比如,U+0639表示阿拉伯字母 Ain,U+0041表示英语的大写字母 A,U+4E25表示汉字严。
但是,Unicode 只是字符集,它之规定了符号的二进制代码,却不规定编码方式。比如:汉字严的 Unicode 是十六进制数4E25,转换成二进制数足足有15位(100111000100101),也就是说,这个符号的表示至少需要2个字节(16 位二进制数)。如果将 0 补全之后存储,计算机读取的时候,他不清楚到底是(01001110)+(00100101)两个 ASCII 码,还是 (100111000100101)单个 Unicode 值。那么就出现了其他的编码方式。

四、 #UTF-8 编码方式

UTF-8 就是在互联网上使用最广的一种 Unicode 的实现方式。其他实现方式还包括 UTF-16(字符用两个字节或四个字节表示)和 UTF-32(字符用四个字节表示),不过在互联网上基本不用。
UTF-8 最大的一个特点,就是它是一种变长的编码方式。它可以使用1~4个字节表示一个符号,根据不同的符号而变化字节长度。
UTF-8 的编码规则很简单,只有二条:

  • 1)对于单字节的符号:字节的第一位设为0,后面7位为这个符号的 Unicode 码。因此对于英语字母,UTF-8 编码和 ASCII 码是相同的;
  • 2)对于 n 字节的符号(n > 1):第一个字节的前 n 位都设为 1,第 n + 1 位设为 0,后面字节的前两位一律设为 10。剩下的没有提及的二进制位,全部为这个符号的 Unicode 码。
    在这里插入图片描述
    如果一个字节的第一位是0,则这个字节单独就是一个字符;如果第一位是1,则连续有多少个1,就表示当前字符占用多少个字节。
    下面,还是以汉字严为例,演示如何实现 UTF-8 编码。
    严的 Unicode 是4E25(100111000100101),根据上表,可以发现4E25处在第三行的范围内(0000 0800 - 0000 FFFF),因此严的 UTF-8 编码需要三个字节,即格式是1110xxxx 10xxxxxx 10xxxxxx。然后,从严的最后一个二进制位开始,依次从后向前填入格式中的 x,多出的位补0。这样就得到了,严的 UTF-8 编码是11100100 10111000 10100101,转换成十六进制就是 E4B8A5。
    如果保存的编码模式不同,"严"对应的值不同:
  • 1)ANSII:文件的编码就是两个字节 D1 CF,这正是严的 GB2312 编码,这也暗示 GB2312 是采用大头方式存储的。
  • 2)Unicode:编码是四个字节 FF FE 25 4E,其中 FF FE 表明是小头方式存储,真正的编码是4E25。
  • 3)Unicode big endian:编码是四个字节 FE FF 4E 25,其中 FE FF 表明是 大头方式 存储。
  • 4)UTF-8:编码是六个字节 EF BB BF E4 B8 A5,前三个字节 EF BB BF 表示这是 UTF-8 编码,后三个 E4B8A5 就是严的具体编码,它的存储顺序与编码顺序是一致的。

五、GB 系列

#GB2312 字符集

天朝专家把那些127号之后的奇异符号们(即 EASCII)取消掉,规定:一个小于127的字符的意义与原来相同,但两个大于127的字符连在一起时,就表示一个汉字,前面的一个字节(他称之为高字节)从0xA1用到 0xF7,后面一个字节(低字节)从0xA1到0xFE,这样我们就可以组合出大约7000多个简体汉字了。在这些编码里,还把数学符号、罗马希腊的字母、日文的假名们都编进去了,连在 ASCII 里本来就有的数字、标点、字母都统统重新编了两个字节长的编码,这就是常说的"全角"字符,而原来在127号以下的那些就叫"半角"字符了。这就是 GB2312, #GBK (即 CP936 字符集)和 #GB18030 是对 GB2312 的拓展。

#GBK 编码方式

由于 GB 2312-80只收录6763个汉字,有不少汉字,如部分在 GB 2312-80推出以后才简化的汉字(如"啰"),部分人名用字(如中国前总理***的"*“字),台湾及香港使用的繁体字,日语及朝鲜语汉字等,并未有收录在内。于是厂商微软利用 GB 2312-80未使用的编码空间,收录 GB 13000.1-93全部字符制定了 GBK 编码。根据微软资料,GBK 是对 GB2312-80的扩展,也就是 CP936字符集 (Code Page 936)的扩展(之前 CP936和 GB 2312-80一模一样),最早实现于 Windows 95简体中文版。虽然 GBK 收录 GB 13000.1-93的全部字符,但编码方式并不相同。GBK 自身并非国家标准,只是曾由国家技术监督局标准化司、电子工业部科技与质量监督司公布为"技术规范指导性文件”。原始 GB13000一直未被业界采用,后续国家标准 #GB18030 技术上兼容 GBK 而非 GB13000。

#GB18030 字符集

全称:国家标准 GB 18030-2005《信息技术中文编码字符集》,是中华人民共和国现时最新的内码字集,是 GB 18030-2000《信息技术信息交换用汉字编码字符集的扩充》的修订版。与 GB 2312-1980完全兼容,与 GBK 本兼容,支持 GB 13000及 Unicode 的全部统一汉字,共收录汉字70244个。

六、总结

字符集 :

ASCII 字符集:常规的字符集,表示英文以及部分符号。
Unicode 字符集:表示世界上所有字符,统一的字符集。
GB2312 字符集:适配汉字,ASCII 字符集的中文拓展字符集。
CP936 字符集:GBK 编码方式使用的字符集,GB2312 的拓展表。
GB18030 字符集:GB2312 的拓展表,包含全部汉字。
#编码方式 :
UTF-8 编码方式:是一种对 Unicode 字符集的编码方式,字符由不定字节长度表示。
UTF-16 编码方式:是一种对 Unicode 字符集的编码方式,字符用两个字节或四个字节表示。
UTF-32 编码方式:是一种对 Unicode 字符集的编码方式,字符用四个字节表示。
GBK 编码方式:使用CP936 编码表,是对 ASCII 表的中文适配。
简单来说:Unicode、GBK 和 Big5码等就是编码的值(也就是术语“字符集”),而 UTF-8、UTF-16、UTF32之类就是这个值的表现形式(即术语“编码格式”)。
另外:Unicode、GBK和Big5码等字符集是不兼容的,同一个汉字在这三个字符集里的码值是完全不一样的。如"汉"的Unicode值与gbk就是不一样的,假设Unicode为a040,GBK为b030。以UTF-8为例,UTF-8码完全只针对Unicode来组织的,如果GBK要转UTF-8必须先转Unicode码,再转UTF-8就OK了。
即GBK、GB2312等与UTF8之间都必须通过Unicode编码才能相互转换:

1)GBK、GB2312 --先转–> Unicode --再转–> UTF8
2)UTF8 --先转–> Unicode --再转–> GBK、GB2312

补充

BIG5字符集&编码

Big5,又称为大五码或五大码,是使用繁体中文(正体中文)社区中最常用的电脑汉字字符集标准,共收录13,060个汉字。中文码分为内码及交换码两类,Big5属中文内码,知名的中文交换码有 CCCII、CNS11643。Big5虽普及于台湾、香港与澳门等繁体中文通行区,但长期以来并非当地的国家标准,而只是业界标准。倚天中文系统、Windows 等主要系统的字符集都是以 Big5准,但厂商又各自增加不同的造字与造字区,派生成多种不同版本。2003年,Big5被收录到 CNS11643中文标准交换码的附录当中,取得了较正式的地位。这个最新版本被称为 Big5-2003。
Big5码是一套双字节字符集,使用了双八码存储方法,以两个字节来安放一个字。第一个字节称为"高位字节",第二个字节称为"低位字节"。"高位字节"使用了0x81-0xFE,"低位字节"使用了0x40-0x7E,及0xA1-0xFE。

大头方式、小头方式

上一节已经提到,UCS-2 格式可以存储 Unicode 码(码点不超过0xFFFF)。以汉字严为例,Unicode 码是4E25,需要用两个字节存储,一个字节是4E,另一个字节是25。存储的时候,4E 在前,25在后,这就是 Big endian 方式;25在前,4E 在后,这是 Little endian 方式。
第一个字节在前,就是"大头方式"(Big endian),第二个字节在前就是"小头方式"(Little endian)。
那么很自然的,就会出现一个问题:计算机怎么知道某一个文件到底采用哪一种方式编码?
Unicode 规范定义,每一个文件的最前面分别加入一个表示编码顺序的字符,这个字符的名字叫做"零宽度非换行空格"(zero width no-break space),用FEFF表示。这正好是两个字节,而且FF比FE大1。
如果一个文本文件的头两个字节是 FE FF,就表示该文件采用大头方式;如果头两个字节是 FF FE,就表示该文件采用小头方式。

参考资料:

字符编码技术专题(一):快速理解ASCII、Unicode、GBK和UTF-8

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1370935.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Shopee买家通系统:轻松获取虾皮买手号的智能利器

近来,有一款强大的软件引起了广泛关注,它就是Shopee买家通系统,为用户提供了自动化注册虾皮买手号的便捷途径。目前,该软件已覆盖菲律宾、泰国、马来西亚、越南、巴西、印度尼西亚等多个国家,为用户提供更广泛的服务。…

CUTANA™ pAG-Tn5 for CUTTag

CUTANA pAG-Tn5是靶向剪切及转座酶(CUT&Tag)技术中进行高效绘制染色质特征的关键试剂。与ChIP-seq相比,CUT&Tag在降低细胞需求量和测序深度的信噪比方面进行了显著改进。CUTANA pAG-Tn5是一种高活性的E. coli转座酶突变体(Tn5)与蛋白A/G的融合产物&#xff…

龍运当头--html做一个中国火龙祝大家龙年大吉

🐉效果展示 🐉HTML展示 <body> <!-- partial:index.partial.html --> <svg><defs><g id=

怎么选择数据安全交换系统,能够防止内部员工泄露数据?

数据泄露可能给企业带来诸多风险&#xff1a;财产损失、身份盗窃、骚扰和诈骗、经济利益受损、客户信任度下降、法律风险和责任等&#xff0c;《2021年度数据泄漏态势分析报告》中显示&#xff0c;在数据泄露的主体中&#xff0c;内部人员导致的数据泄漏事件占比接近60%。 员工…

ECMAScript6历史-前端开发+ECMAScript+基础语法+入门教程

ECMAScript6详解 ECMAScript 历史 我们首先来看 ECMA 是什么。ECMA&#xff0c;读音类似“埃科妈”&#xff0c;是欧洲计算机制造商协会&#xff08;European Computer Manufacturers Association&#xff09;的简称&#xff0c;是一家国际性会员制度的信息和电信标准组织。19…

FCRP第一题详解一

先看效果: 20240106-094943 看他的第一要求: 1.整个模板只能出现一个数据集,下拉复选框与报表主体共用一个数据集,且不影响互相显示。 所以这里不能通过SQL语句来过滤,SQL语句中中只能全部查询出来,这样保证了下拉框的数据是全部,单元格里的数据只能通过数据列过滤来实…

回归预测 | Matlab实现DE-BP差分算法优化BP神经网络多变量回归预测

回归预测 | Matlab实现DE-BP差分算法优化BP神经网络多变量回归预测 目录 回归预测 | Matlab实现DE-BP差分算法优化BP神经网络多变量回归预测效果一览基本介绍程序设计参考资料 效果一览 基本介绍 1.Matlab实现DE-BP差分算法优化BP神经网络多变量回归预测&#xff08;完整源码和…

openssl3.2 - 自己构建openssl.exe的VS工程(在编译完的源码版本上)

文章目录 openssl3.2 - 自己构建openssl.exe的VS工程(在编译完的源码版本上)概述笔记备注END openssl3.2 - 自己构建openssl.exe的VS工程(在编译完的源码版本上) 概述 将openssl3.2编译出来了(openssl3.2 - 编译) 安装后的openssl.exe可以干openssl3.2所有的事情, 用openssl.…

Java缓冲字符流

PrintWriter的自动行刷新功能 如果实例化PW时第一个参数传入的是一个流&#xff0c;则此时可以再传入一个boolean型的参数&#xff0c;此值为true时就打开了自动行刷新功能。 即: 每当我们用PW的println方法写出一行字符串后会自动flush. package io; ​ import java.io.*; i…

[Docker] Mac M1系列芯片上完美运行Docker

docker pull qinchz/dm8-arm64 container_name: dm8ports:- "5236:5236"mem_limit: 1gmemswap_limit: 1gvolumes:- /data/dm8:/home/dmdba/data 数据库实例参数已修改&#xff0c;接近oracle使用习惯 #字符集 utf-8 CHARSET1 #VARCHAR 类型对象的长度以字符为单位 …

工程监测领域振弦采集仪的数据处理与分析方法探讨

工程监测领域振弦采集仪的数据处理与分析方法探讨 在工程监测领域&#xff0c;振弦采集仪是常用的一种设备&#xff0c;用于测量和记录结构物的振动数据。数据处理和分析是使用振弦采集仪得到的数据的重要环节&#xff0c;可以帮助工程师了解结构物的振动特性&#xff0c;评估…

C++信息学奥赛1087:级数求和

#include<bits/stdc.h> using namespace std; int main() {int k;cin>>k; // 从标准输入获取一个整数kdouble sum0; // 初始化sum变量为0&#xff0c;用于存储累加的和int i; // 初始化循环变量ifor(i1;;i){ // 无限循环&#xff0c;直到满足条件时跳出循环sum(dou…

C#,字符串匹配(模式搜索)KMP算法的源代码与数据可视化

D.E.Knuth J.H.Morris 一、KMP算法 KMP 算法&#xff08;Knuth-Morris-Pratt 算法&#xff09;是其中一个著名的、传统的字符串匹配算法&#xff0c;效率比较高。 KMP算法由D.E.Knuth&#xff0c;J.H.Morris和V.R.Pratt在 Brute-Force算法的基础上提出的模式匹配的改进算法。…

CDN加速之HTTPS配置

记录一下HTTPS配置的免费证书配置 2张图搞定 最后补充说明&#xff1a; 由于CDN采用的Tengine服务基于Nginx&#xff0c;因此开启HTTPS安全加速功能的加速域名&#xff0c;只支持上传Nginx能读取的PEM格式的证书。如果证书不是PEM格式&#xff0c;需转换成PEM格式。转换方法&a…

巧用 G5g 畅游Android流媒体游戏

&#x1f497;wei_shuo的个人主页 &#x1f4ab;wei_shuo的学习社区 &#x1f310;Hello World &#xff01; 巧用 G5g 畅游Android流媒体游戏 概览 Amazon EC2 G5g 实例由 AWS Graviton2 处理器提供支持&#xff0c;并配备 NVIDIA T4G Tensor Core GPU&#xff0c;可为 Andro…

SAP SMARTFORMS 打印表换行

表单打印自动换行&#xff0c;值的拼接 cl_abap_char_utilities>cr_lfSMARTFORMS 设置 程序传值处理 TYPES: BEGIN OF ty_c, zm_zd TYPE char25, END OF ty_c. DATA: lt_ty1 TYPE TABLE OF ty_c, lt_ty2 TYPE TABLE OF ty_c, ls_t…

重新认识canvas,掌握必要的联结密码

查看专栏目录 canvas示例教程100专栏&#xff0c;提供canvas的基础知识&#xff0c;高级动画&#xff0c;相关应用扩展等信息。canvas作为html的一部分&#xff0c;是图像图标地图可视化的一个重要的基础&#xff0c;学好了canvas&#xff0c;在其他的一些应用上将会起到非常重…

极智AI | 谈谈通义舞王背后的技术Animate Anyone 让任何人动起来

欢迎关注我的公众号 [极智视界],获取我的更多技术分享 大家好,我是极智视界,本文分享了 谈谈通义舞王背后的技术Animate Anyone 让任何人动起来。 邀您加入我的知识星球「极智视界」,星球内有超多好玩的项目实战源码下载,链接:https://t.zsxq.com/0aiNxERDq 来吧,让我们…

云平台API服务

问题 云平台API服务 详细问题 笔者今天需要使用病虫害图像识别API&#xff0c;游览器搜索后&#xff0c;结果如下&#xff1a; 点击第一个搜索结果&#xff1a;RMB50000&#xff0c;虽然提供1000000次病虫害识别&#xff0c;但是笔者没有这般大地需求&#xff0c;有没有可能…

vue-vben-admin 与.net core 结合实例 【自学与教学 小白教程】---第3节

ue-vben-admin 与.net core 结合实例 这里计划使用.net core 作为后端 。目标&#xff1a;打造好看 易用 开箱即用 的netcore一体化框架。Vue Vben Admin For NetCore 取命 hcrain-vvadmin 我不是前端人员 但有时开发还是要写一些界面。 之前使用layui是时候 狠心升级下了。 …