字符集、ASCII、GBK、UTF-8、Unicode、乱码、字符编码、解码问题等
编码解码
- 一、背景
- 二、字符的相关概念
- 三、字符集
- 3.1 ASCII[ˈæski]
- 3.1.1 ASCII的编码方式
- 3.1.2 EASCII
- 3.2 GBK
- 3.2.1 GB 2312-80
- 3.2.2 GBK的制订
- 3.2.3 GBK的实现方式
- 3.3 Unicode(统一码、万国码)
- 3.3.1 Unicode的出现背景
- 3.3.2 Unicode的编写方式
- 3.3.3 Unicode的实现方式
- 3.3.3 Unicode的问题
- 3.3.4 Unicode的发展
- 四、锟斤拷和烫的来源
- 4.1 锟斤拷
- 4.2 烫、屯、
- 4.3 锘、匡、豢
- 五、使用Java程序编码、解码
资料来源【锟斤拷�⊠是怎样炼成的——中文显示“⼊”门指南【柴知道】、【一听就懂字符集、ASCII、GBK、UTF-8、Unicode、乱码、字符编码、解码问题的讲解】
一、背景
我们经常见到txt文本打开后却通篇是锟斤拷或者烫烫烫烫烫,也见过一些复杂或者生僻的字显示时换了字体样式,这是由于编码方式和解码方式不同造成的。
二、字符的相关概念
- 一个汉字、一个拉丁字母、一个数字,甚至回车、换行等控制命令,世界上各种语言里的“字”和“标点符号”,都属于“字符”。
- 一堆字符组成的集合,叫做“字符集”。
- 把字符转换成代码的规则,叫做“字符编码”。
- 每个字符经过字符编码后各自对应相应的“码位”(码点),譬如“A”对应“0011 0101”
- 码位的总数称为“码空间”
三、字符集
3.1 ASCII[ˈæski]
3.1.1 ASCII的编码方式
- 1967年,美国人先搞出了“美国信息交换标准代码”(American Standard Code for Information Interchange,简称 ASCII)。
- ASCII每个字符的码位都是一个字节,ASCII 总共收录了 128 个字符,包括大小写拉丁字母、数字、常用标点,以及像 ESC、换行这种看不见的控制字符。每个字符的码位首位一定是0。
3.1.2 EASCII
- 用一个字节编码字符,最多能容纳256个码位。ASCII 收录了 128 个,所以西欧一些国家,就制订了“扩展美国信息交换标准代码”,EASCII。
- EASCII的内码是由0到255共有256个字符组成。来表示其他的字符:比如上方有注音符号的法语字母,西班牙语里的特殊标点,数学上常用的 α、β 等希腊字母,以及一大堆特殊符号等等。
3.2 GBK
3.2.1 GB 2312-80
- 各国、地区的官方标准则是根据 ISO/IEC 10646 来制定的。ISO/IEC 10646 跟 Unicode 标准区别不大,码位完全一致,二者几乎可以划等号,只是面向的对象不同。
- 我国 1980 年公布的《GB 2312-80 信息交换用汉字编码字符集基本集》,就包含了 6763 个常用简体汉字,以及一些标点、符号、数字、拉丁字母等。
- 每个汉字及符号以两个字节来表示
因为绝大多数简体汉字字体,都还是只适配了 GB 2312 里的这六千多个常用汉字。比如最常见的公文字体之一「仿宋 GB2312」,意思就是说我只设计了 GB 2312 字符集中的字符。如果不这个字符集中,那么计算机会调用其他字体来显示或直接给你显示成个框框。
3.2.2 GBK的制订
- 微软就根据各地字符集和字符编码,扩展了 GB 2312 字符集,共包含2万多字符,加入了一些罕见字、繁体汉字同时兼容ASCII,这份扩展的字符集后来成为了“汉字内码扩展规范 GBK”,这里的 K 就是“扩展”的意思。
- 但即便是少量汉字,也会出现中日韩一字多形的问题,譬如:“户/户/戸”
3.2.3 GBK的实现方式
GBK兼容ASCII,但是一个是以单字节编码,一个是以双字节编码,怎么区分呢?
GBK规定,汉字字节的第一位必须是1,两个字节共16位,舍弃一位,仍有32768个码位,能够满足所需
3.3 Unicode(统一码、万国码)
3.3.1 Unicode的出现背景
为了解决相互之间的兼容性差的问题,Unicode 技术委员会为每种语言中的每个字符设定了统一并且唯一的二进制编码,以满足跨语言、跨平台进行文本转换、处理的要求。1990年,统一码开始研发。Unicode 1.0发布于1991年10月
3.3.2 Unicode的编写方式
- Unicode 决定以「书写系统」为标准来分类和收录字符。虽然拉丁字母里的“o”,和西里尔字母“о”,以及希腊字母“ο”,长得几乎一样,但既然属于三个不同的书写系统,而且过去各地都已经搞出了相应的字符编码,为了兼容性,就需要安排三个不同的码位。
- 其中甚至还有为各个国家、地区、甚至企业准备的“私用区”,可以供大家自定义使用。像苹果就把自己的logo放进了私用区
- Unicode提供了三种编码方案:UTF-8,UTF-16,UTF-32
3.3.3 Unicode的实现方式
- UTF-32直接用四个字节表示一个字符
- UTF-16是变长编码方式,每个字符编码为2或4字节。
- 当码点<216时直接转换,不够在前补零
- 当码点>=216,讲码点-16(65536),最多需要20位表示,不够前面补零
- 将前10位单独取出和0xD800相加,得到了一个新的整数W1,W1的取值范围是 [0xD800,0xDBFF] 。W1又称为高位代理项
- 将后10位单独取出和0xDC00相加,得到了一个新的整数W2,W2的取值范围是[0xDC00,0xDFFF]。W2又称低位代理项
- 最后,将W1和W2合并起来,得到的二进制字节就是UTF-16的编码结果,总共是4个字节"
UTF-16的特点
- 对于在区间[0xD800,0xDFFF]中的码点,Unicode字符集未定义任何字符,这个区间的码点专用于UTF-16的代理项UTF-16中,高位代理项和低位代理项是不重叠的;
- 高位代理项的范围是[0xD800,0xDBFF],而低位代理项的则是[0xDC00,0xDFFF]
- UTF-16是一种“自同步(self-synchronizing)”的编码方式,即可以在不追溯前面代码单元的前提下,独立判断出是否是某字符的开始单元
- UTF-8也是自同步、变长编码方式,分为四个长度区,兼容ASCII,汉字占三个字节
3.3.3 Unicode的问题
- 安全问题:利用之间长得略微有点区别字符制作出钓鱼网站、利用康熙部首的“⼊”,替换了正常的“入”。
- UTF-32、UTF-16不兼容ASCII,且浪费空间
3.3.4 Unicode的发展
Unicode至今仍在不断增修前最新的版本为 2020 年 3 月公布的 13.0,收录了 13 万个字符。
具体的符号对应表,可以查询unicode.org,或者专门的汉字对应表。
2022年1月,Unicode 技术委员会批准在同年9月Unicode 15.0中发布五个新符号。这些符号基于太阳系中新发现的跨海王星天体(TNO,在海王星轨道之外的天体);
5月6日,Unicode标准宣布将5个行星符号加入字符集,包括中国水神共工等。
四、锟斤拷和烫的来源
4.1 锟斤拷
- 当你以GBK 编码保存一段文字,
- 再用最常见的 UTF-8 编码打开,会因为识别问题用�替换,
- 再次保存,文档中所有的�字符,就被根据 UTF-8 编码,编码为了 0xEF BF BD。
- 再次使用 GBK 编码打开了这份文档。此时根据 GBK 编码规则,EFBF、BDEF、BFBD 这三个码位对应的,正是“锟斤拷”
4.2 烫、屯、
- 微软编译器访问未经初始化的栈内存,编译器在debug模式下会对这块栈内存写入0xCCCCCCC,而控制台默认以GBK显示,而“烫”的GBK编码是0xCCCC
- 访问未经初始化的堆内存,编译器会写入0xCD,并且堆的前后字节会写入0xFD来作为检测区防止数组越界,而0xCDCD对应屯
4.3 锘、匡、豢
与字节标记顺序有关(BOM)
UTF-8的字节标记:EF BB BF
锘:EFBB
匡:BFEF
豢:BBBF
五、使用Java程序编码、解码
Java程序编码
Java程序解码
相关文章:
字符集、ASCII、GBK、UTF-8、Unicode、乱码、字符编码、解码问题等
编码解码一、背景二、字符的相关概念三、字符集3.1 ASCII[ˈski]3.1.1 ASCII的编码方式3.1.2 EASCII3.2 GBK3.2.1 GB 2312-803.2.2 GBK的制订3.2.3 GBK的实现方式3.3 Unicode(统一码、万国码)3.3.1 Unicode的出现背景3.3.2 Unicode的编写方式3.3.3 Unico…...
Java 布隆过滤器
你在么?在!一定在么?不在!一定不在么? 你想要100%的准去性,还是99%的准确性附带较高的速度和较小的资源消耗。 任何算法,任何经营收到的背后,都是时间效益 资源消耗 准确性的平衡&am…...
vscode连接服务器(腾讯云)
文章目录1. vscode远程总是报错2. vscode能连上腾讯云但密码不对或者登录后不能打开文件或文件夹1. vscode远程总是报错 报错如图所示 Could not establish connection to *** 过程试图写入的管道不存在。 在百度、csdn找了好久都是说删掉.ssh文件下的某个文件但我压根没有&a…...
IOS崩溃文件符号化实践
1.背景与项目难点 1.1 背景 由于公司之前使用的友盟要收费,filebase服务由谷歌提供,存在数据合规风险。需要实现稳定性分析功能,通过支持app崩溃信息实时采集、实时上报、实时自动解析并定位出代码问题,帮助研发同学及时定位崩溃…...
设计模式之适配器模式与桥接模式详解和应用
目录1 适配器模式1.1 定义1.2 应用场景1.3 适配器角色1.4 类适配器1.5 对象适配器1.5 接口适配器1.6 实战1.7 源码1.8 适配器与装饰器的对比1.9 适配器模式的优缺点1.10 总结2 桥接模式2.1 原理解析2.2 角色2.3 通用写法2.4 应用场景2.5 业务场景中的运用2.6 源码2.7 桥接模式优…...
Winform控件开发(14)——NotifyIcon(史上最全)
前言: 先看个气泡提示框的效果: 代码如下: 在一个button中注册click事件,当我们点击button1时,就能显示气泡 private void button1_Click(object sender, EventArgs e){notifyIcon1.Visible = true;notifyIcon1...
Verilog 学习第四节(从计数器到可控制线性序列机——LED实验进化六部曲)
从计数器到可控制线性序列机——LED实验进化六部曲一:让LED灯按照亮0.25s,灭0.75s的状态循环亮灭二:让LED灯按照亮0.25s,灭0.5s,亮0.75s,灭1s的状态循环亮灭三:让LED灯按照指定的亮灭模式亮灭&a…...
操作SSH无密登录配置
例如小编有三台服务器需要相互访问,就需要配置三台,这三台分别是hadoop102,hadoop103 , hadoop1041.打开三个服务器,分别生成hadoop102,hadoop103 , hadoop104的公钥和私钥输入命令,然后一直回车,这时候什么…...
Websocket详细介绍
需求背景 在某个资产平台,在不了解需求的情况下,我突然接到了一个任务,让我做某个页面窗口的即时通讯,想到了用websocket技术,我从来没用过,被迫接受了这个任务,我带着浓烈的兴趣,就…...
大数据书单(100本)
大数据书单(100本) 序号 书名 作者 出版社 1 Hadoop权威指南:大数据的存储与分析(第4版)(修订版)(升级版) Tom White 清华大学出版社 2 Hive编程指南 卡普廖洛 (Edward Capriolo) / 万普勒 (Dean Wampler) / 卢森格林 (Jason Rutherglen) / 曹坤 人民邮…...
python实战应用讲解-【语法基础篇】初识Python(附示例代码)
目录 前言 Python基础 基本概念: 为什么使用Python? Python2.x与3.x版本区别...
【2023保研夏令营】网安、CS(西交、华师、科、南等)
文章目录一、基本情况二、投递和入营情况三、考核情况1. 西交软院(面试)2. 川大网安(笔试面试)3. 华东师范数据学院(机试面试)4. 人大信息学院专硕(机试面试,保密)5. 南大…...
Qt COM组件导出源文件
文章目录摘要dumpcpp.exe注册COM组件COM 组件转CPP参考关键字: Qt、 COM、 组件、 源文件、 dumpcpp摘要 由于厂家提供的库不是纯净C库,是基于COM组件开的库,在和厂家友好交流无果下,只能研究下Qt 如何调用,好在Qt 的…...
各数据库数据类型的介绍和匹配
各数据库数据类型的介绍和匹配1. Oracle的数据类型2. Mysql的数据类型3. Sql server的数据类型4. 类型匹配5. Awakening1. Oracle的数据类型 数据类型介绍 VARCHAR2 :可变长度的字符串 最大长度4000 bytes 可做索引的最大长度749; NCHAR :根据字符集而定的固定长度字…...
Rancher 部署 MySQL
文章目录创建 pvc部署 MySQL前置条件:安装 rancher,可参考文章 docker 部署 rancher 创建 pvc MySQL 数据库是需要存储的,所以必须先准备 pvc 创建 pvc 自定义 pvc 名称选择已经新建好的 storageclass,storageclass 的创建可参考…...
Python语言零基础入门教程(二十五)
Python OS 文件/目录方法 Python语言零基础入门教程(二十四) 39、Python os.openpty() 方法 概述 os.openpty() 方法用于打开一个新的伪终端对。返回 pty 和 tty的文件描述符。 语法 openpty()方法语法格式如下: os.openpty()参数 无 返…...
蓝桥杯算法训练合集十五 1.打翻的闹钟2.智斗锅鸡3.文件列表
目录 1.打翻的闹钟 2.智斗锅鸡 3.文件列表 1.打翻的闹钟 问题描述 冯迭伊曼晚上刷吉米多维奇刷的太勤奋了,几乎天天迟到。崔神为了让VonDieEman改掉迟到的坏毛病,给他买了个闹钟。 一天早上,老冯被闹钟吵醒,他随手将闹钟按掉丢…...
CPU扫盲-CPU与指令集
指令集架构就像是特定的CPU的设计图纸,它规定了这个CPU需要支持那些指令、寄存器有那些状态以及输入输出模型。根据指令集结构的设计,在CPU上通过硬件电路进行实现,就得到了支持该指令集的CPU。指令集就像是我们编程语言中的接口,…...
VINS-Mono/Fusion与OpenCV去畸变对比
VINS中没有直接使用opencv的去畸变函数,而是自己编写了迭代函数完成去畸变操作,主要是为了加快去畸变计算速度 本文对二者的结果精度和耗时进行了对比 VINS-Mono/Fusion与OpenCV去畸变对比1 去畸变原理2 代码实现2.1 OpenCV去畸变2.2 VINS去畸变3 二者对…...
jmx prometheus引起的一次cpu飙高
用户接入了jmx agent进行prometheus监控后,在某个时间点出现cpu飙高 排查思路: 1、top,找到java进程ID 2、top -Hp 进程ID,找到java进程下占用高CPU的线程ID 3、jstack 进程ID,找到那个高CPU的线程ID的堆栈。 4、分析堆…...
Android 虚拟 A/B 详解(六) SnapshotManager 之状态数据
本文为洛奇看世界(guyongqiangx)原创,转载请注明出处。 原文链接:https://blog.csdn.net/guyongqiangx/article/details/129094203 Android 虚拟 A/B 分区《AAndroid 虚拟 A/B 分区》系列,更新中,文章列表: Android 虚拟分区详解(一) 参考资料推荐Android 虚拟分区详解(二…...
Python快速入门系列之一:Python对象
Python对象1. 列表(list)2. 元组(tuple)3. 字典(dict)4. 集合(set)5. 字符串(string)6. BIF (Built-in Function)7. 列表、集合以及字…...
【博客626】不同类型的ARP报文作用以及ARP老化机制
不同类型的ARP报文作用以及ARP老化机制 1、ARP协议及报文 2、不同类型的ARP报文作用 3、ARP工作原理 4、ARP老化机制 5、Linux ARP老化机制 ARP状态机: 在上图中,我们看到只有arp缓存项的reachable状态对于外发包是可用的,对于stale状态的…...
nacos discovery和config
微服务和nacos版本都在2.x及之后。1、discovery用于服务注册,将想要注册的服务注册到nacos中,被naocs发现。pom引入的依赖是:yml配置文件中:2、config用于获取nacos配置管理->配置列表下配置文件中的内容pom引入的依赖是&#…...
【算法数据结构体系篇class06】:堆、大根堆、小根堆、优先队列
一、堆结构1)堆结构就是用数组实现的完全二叉树结构2)完全二叉树中如果每棵子树的最大值都在顶部就是大根堆3)完全二叉树中如果每棵子树的最小值都在顶部就是小根堆4)堆结构的heapInsert与heapify操作5)堆结构的增大ad…...
试题 算法提高 最小字符串
资源限制内存限制:256.0MB C/C时间限制:2.0s Java时间限制:6.0s Python时间限制:10.0s问题描述给定一些字符串(只包含小写字母),要求将他们串起来构成一个字典序最小的字符串。输入格式第一行T,表示有T组数据。接下来T…...
已解决ImportError: cannot import name ‘featureextractor‘ from ‘radiomics‘
已解决from radiomics import featureextractor导包,抛出ImportError: cannot import name ‘featureextractor‘ from ‘radiomics‘异常的正确解决方法,亲测有效!!! 文章目录报错问题报错翻译报错原因解决方法联系博…...
乡村振兴研究:全网最全指标农村经济面板数据(2000-2021年)
数据来源:国家统计局 时间跨度:2000-2021年 区域范围:全国31省 指标说明: 部分样例数据: 行政区划代码地区年份经度纬度乡镇数(个)乡数(个)镇数(个)村民委员会数(个)乡村户数(万户)乡村人口(万人)乡村从业人员(万人…...
C语言中用rand()函数产生一随机数
在C语言中如何产生一个随机数呢?用rand()函数。 rand()函数在头文件:#include <stdio.h>中,函数原型:int rand(void);。rand()会返回一个范围在0到RAND_MAX(32767)之间的随机数(整数&…...
关于系统架构
1.系统架构分类: C/S架构 B/S架构 2.C/S架构 Client / Server(客户端 / 服务器) 特点:需要安装特定的客户端软件。 C/S架构的系统优点和缺点: 优点: 1)速度快(软件中数据大部分都是集成到客户端当中,很少量的数据从服…...
武汉手机网站建设动态/做互联网项目怎么推广
丰 顺 论 坛 丰顺人都在看丰顺高铁啥时候能通车?当然是越快越好呀~小编这么说当然是有好事汇报昨天(4月17日)咱们离梅汕高铁通车又更近一步啦(戳视频,看咋回事)放大观看效果更佳☟☟☟记者从中铁二局梅汕项目部获悉广东省最长在建铁路隧道丰顺隧道于日前…...
做网站的费用入账/网站模板及源码
...
怎么找网站的后台地址/网络推广如何收费
年年岁岁花相似,岁岁年年各不同,当气温渐暖时,又即将迎来新一届毕业生大军进入社会,而这新的大军里的面孔已焕然一新,也许你就是其中的一员。 初出校园,毕竟学校不同于社会,学习不同于工作。每个…...
网盘做网站空间/网络营销的推广方法
一:索引优势劣势 优势 1) 类似于书籍的目录索引,提高数据检索的效率,降低数据库的IO成本。 2) 通过索引列对数据进行排序,降低数据排序的成本,降低CPU的消耗。 劣势 1) 实际上索引也…...
网站功能价格表/百度sem优化师
升级mysql的编码为 utf8mb41. 原因,mysql 的utf8编码最多支持3个字节,导致了有些四个字节的数据插不进去,如emoji表情2. utf8mb4的最低mysql版本支持版本为5.5.3,若不是,请升级到较新版本。2.1 修改database、table和c…...
做3dh春丽网站叫什么/今日头条新闻大事
1. 使用简单事件处理器 可以用几种不同的方式处理事件。最直接的方式是用事件属性创建一个简单事件处理器(simple event handler)。元素为它们支持的每一种事件都定义了一个事件属性。举个例子,onmouseover事件属性对应全局事件mouseover&…...