都被“锟斤拷”毒害过,那么究竟是为什么会出现这些奇怪的字符?

不管是在工作中还是生活中,都被“锟斤拷”毒害过,比如这样:

Image

或者这样:

Image

还有这样:

Image

那么究竟是为什么会出现这些奇怪的字符?

ASCII编码

在计算机底层都是用01进行存储的,ASCII编码将所有的字母及符号进行编码后转成二进制的01进行存储,字母和符号占1个字节(即8bit),标准的ASCII码规定最高位必须为0,因此ASCII编码只能有128个,转成十进制即为0-127。标准的ASCII码表如下:

Image

ASCII码表只有128个字符,对于英语来说已经够用了,但是世界上还有很多国家的文字各不相同,这时候就需要一个更加全面的编码出现。

Unicode(又称统一码、万国码、单一码)是计算机科学领域里的一项业界标准。它为每种语言中的每个字符设定了统一并且唯一的二进制编码。在表示一个Unicode的字符时,通常会用“U+”然后紧接着一组十六进制的数字来表示这个字符。

UTF-8与GBK

UTF-8是针对Unicode的一种可变长度字符编码。它可以用来表示Unicode标准中的任何字符,而且其编码中的第一个字节仍与ASCII相容。UTF-8使用一至四个字节为每个字符进行编码。常用的汉字采用3个字节进行编码。

因为UTF-8是针对Unicode的一种可变长度的字符编码,所以它包含了世界上所有字符的编码,对于那些早录入的字符,就会优先使用1、2个字节来存储,对于迟录入的字符存储占用的字节就会大一些,这样,那些迟录入的字符存储空间就会很大。

对于一个中文网站,实际上并不需要其他国家的文字出现,但是中国汉字用UTF-8进行编码,大多数却占用了3个字节甚至更多字节,这样就造成了不必要的存储浪费。为了解决这种问题,中华人民共和国全国信息技术标准化技术委员会制定了一套GB系列的编码,最常用的就是GBK了。

GBK编码英文使用单字节编码,完全兼容ASCII字符,汉字使用了两个字节进行编码,其编码范围从0x8140(表示16进制)至0xFEFE(剔除xx7F),共23940个码位,共收录了21003个汉字,图形符号 883 个。

为什么要剔除xx7F,因为它对应的ASCII码表是DEL,意味着要向后删除一个字符。

为什么会出现“锟斤拷”

Unicode编码一直持续在收录各种字符,这就可能会出现各种操作系统支持的Unicode字符不一样。这也就会导致A上的一个用Unicode编码的字符,在B上就会出现无法显示的情况。为了避免这种情况,在Unicode中定义了一个特殊字符�,它的Unicode编码为0xFFFD。

假如A支持特殊字符,但是B并不支持这个,那么在B中将会用�来代替。

Image

这个字符用UTF-8编码后,十六进制表示为0xEF 0XBF 0XBD。如果连续出现两个符号,那么用UTF-8编码后的十六进制则表示为0xEF 0XBF 0XBD 0xEF 0XBF 0XBD,这时候再转码成GBK,因为GBK中用两个字节表示一个字符,那么上述的字符就成了(0xEFBF),(0xBDEF),(0xBFBD)。出现锟斤拷的原因就是UTF-8转码GBK的过程中出现了问题。当然如果想要出现锟斤拷,则至少需要两个字符出现乱码。

接下来,我们直接用代码来看一下效果:

Explain@Test
void contextLoads() throws Exception {String str = "�";String strCode = new String(str.getBytes("UTF-8"), "GBK");System.out.println(strCode);
}

运行结果为锟�,前面也说了如果想要出现锟斤拷,则至少需要为两个字符,现在再修改一下代码。

@Test
void contextLoads() throws Exception {String str = "��";String strCode = new String(str.getBytes("UTF-8"), "GBK");System.out.println(strCode);
}

运行结果如下为锟斤拷

如果以后再遇到锟斤拷,不要慌,它一定是UTF-8在转换GBK编码的时候出现了问题。所以GBK编码虽然减少了内存的浪费,但是也带来了不少问题。


The End!!创作不易,欢迎点赞/评论!!欢迎关注个人公众号

在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

高通OTA升级方案介绍

高通OTA升级方案介绍 1. 高通LE OTA1.1 背景1.2 Recovery系统 2. SDX12 OTA方案3 OTA包的加密 3UK Penetration Test对于OTA升级也有严格的安全要求,下面是几条用例要求: Firmware: A sufficiently strong signing key MUST be in use. Signing keys MUS…

Ubuntu18 Opencv3.4.12 viz 3D显示安装、编译、使用、移植

Opencv3.*主模块默认包括两个3D库 calib3d用于相机校准和三维重建 ,viz用于三维图像显示,其中viz是cmake选配。 参考: https://docs.opencv.org/3.4.12/index.html 下载linux版本的源码 sources。 查看cmake apt list --installed | grep…

力扣hot100 两数之和 哈希表

&#x1f468;‍&#x1f3eb; 力扣 两数之和 &#x1f60b; 思路 在一个数组中如何快速找到某一个数的互补数&#xff1a;哈希表 O(1)实现⭐ AC code class Solution {public int[] twoSum(int[] nums, int target){HashMap<Integer, Integer> map new HashMap<&g…

PC端页面进去先出现加载效果

自定义指令v-loading&#xff0c;只需要绑定Boolean即可 v-loading“loading” <el-table :data"list" border style"width: 100%" v-loading"loading"><el-table-column align"center" label"序号" width"5…

中部A股第一城,长沙如何赢商?

文|智能相对论 作者|范柔丝 长沙的马路&#xff0c;都很有故事。 一条解放西路&#xff0c;是全国人民都争相打卡的娱乐地标&#xff1b;一条太平街&#xff0c;既承载了历史的厚重又演绎着现代的鲜活...... 但如果来到河西的桐梓坡路&#xff0c;风景会变得截然不同。 沿…

微信小程序蓝牙连接 uniApp蓝牙连接设备

蓝牙列表期待效果 代码 <template><view class"bluetooth-list"><view class"align-items option" style"justify-content: space-between;" v-for"item in bluetoothList" :key"item.deviceId"><vie…

汽车智能座舱/智能驾驶SOC -2

第二篇&#xff08;笔记&#xff09;。 未来智能汽车电子电气将会是集中式架构&#xff08;车载数据中心&#xff09;虚拟化技术&#xff08;提供车载数据中心灵活性和安全性&#xff09;这个几乎是毋庸置疑的了。国际大厂也否纷纷布局超算芯片和车载数据中心平台。但是演进需…

网络安全等级保护收费标准?

不同省份价格会略有不同&#xff0c;二级等保一般不低于5万元;三级等保不低于9万元&#xff0c;个别省份也可能7万也能办理&#xff0c;根据企业实际情况和省市选定的代理机构确定。 等级保护二级? 第二级等保是指信息系统受到破坏后&#xff0c;会对公民、法人和其他组织的合…

win10底部任务栏无响应?试试这些方法!

win10的任务栏是一个关键的用户界面元素&#xff0c;允许您轻松访问应用程序和系统功能。然而&#xff0c;有时您可能会遇到win10底部任务栏无响应的问题&#xff0c;这会妨碍您的工作流程。本篇文章将介绍解决win 10底部任务栏无响应的问题的三种方法&#xff0c;每种方法都会…

《数据仓库入门实践》

前言&#xff1a; 1、问什么要写这篇博客&#xff1f; 随着自己在数仓岗位工作的年限增加&#xff0c;对数仓的理解和认知也在发生着变化 所有用这篇博客来记录工作中用到的知识点与经验 2、这篇博客主要记录了哪些内容&#xff1f; 在日常工作中&#xff0c;发现刚接触不久数仓…

脸爱云一脸通智慧管理平台未授权访问

声明 本文仅用于技术交流&#xff0c;请勿用于非法用途 由于传播、利用此文所提供的信息而造成的任何直接或者间接的后果及损失&#xff0c;均由使用者本人负责&#xff0c;文章作者不为此承担任何责任。 一、漏洞概述 脸爱云一脸通智慧管理平台存在严重漏洞&#xff0c;允许…

【机器学习基础】K-Means聚类算法

&#x1f680;个人主页&#xff1a;为梦而生~ 关注我一起学习吧&#xff01; &#x1f4a1;专栏&#xff1a;机器学习 欢迎订阅&#xff01;相对完整的机器学习基础教学&#xff01; ⭐特别提醒&#xff1a;针对机器学习&#xff0c;特别开始专栏&#xff1a;机器学习python实战…

深度学习图像修复算法 - opencv python 机器视觉 计算机竞赛

文章目录 0 前言2 什么是图像内容填充修复3 原理分析3.1 第一步&#xff1a;将图像理解为一个概率分布的样本3.2 补全图像 3.3 快速生成假图像3.4 生成对抗网络(Generative Adversarial Net, GAN) 的架构3.5 使用G(z)生成伪图像 4 在Tensorflow上构建DCGANs最后 0 前言 &#…

SpringCloud - 新版淘汰 Ribbon,在 OpenFeign 中整合 LoadBalancer 负载均衡

目录 一、LoadBalancer 负载均衡 1.1、前言 1.2、LoadBalancer 负载均衡底层实现原理 二、整合 OpenFeign LoadBalancer 2.1、所需依赖 2.2、具体实现 2.3、自定义负载均衡策略 一、LoadBalancer 负载均衡 1.1、前言 在 2020 年以前的 SpringCloud 采用 Ribbon 作为负载…

【Flask使用】全知识md文档,4大部分60页第3篇:Flask模板使用和案例

本文的主要内容&#xff1a;flask视图&路由、虚拟环境安装、路由各种定义、状态保持、cookie、session、模板基本使用、过滤器&自定义过滤器、模板代码复用&#xff1a;宏、继承/包含、模板中特有变量和函数、Flask-WTF 表单、CSRF、数据库操作、ORM、Flask-SQLAlchemy…

Visual NLP:图像信息自动提取的未来

本文旨在以简单的方式解释 Visual NLP 的关键概念&#xff0c;让你了解 Visual NLP 的含义、它的用例是什么、如何使用它以及为什么它是构建自动提取管道的未来 。 NSDT在线工具推荐&#xff1a; Three.js AI纹理开发包 - YOLO合成数据生成器 - GLTF/GLB在线编辑 - 3D模型格式在…

在线工具收集

在线工具收集 1、在线P图 https://www.photopea.com/ 一款类似于PS的在线抠图软件 ①去除图片中的文字&#xff0c;并填充背景色 第一步&#xff1a;使用矩形选中要清除的文字 第二步&#xff1a;点击编辑选择填充 第三步&#xff1a;选择内容识别&#xff0c;保留透明区域…

趋势解读:TikTok独创的社交语言是如何演变的

在数字时代的浪潮中&#xff0c;社交媒体平台成为人们传递信息、表达创意和建立社交联系的重要场所。而在这众多社交平台中&#xff0c;TikTok以其独特的社交语言和创新的内容形式&#xff0c;迅速吸引了全球数以亿计的用户。本文将深入探讨TikTok的社交语言是如何独创并演变的…

使用Python画一棵树

&#x1f38a;专栏【不单调的代码】 &#x1f354;喜欢的诗句&#xff1a;更喜岷山千里雪 三军过后尽开颜。 &#x1f386;音乐分享【如愿】 &#x1f970;欢迎并且感谢大家指出我的问题 文章目录 &#x1f339;Turtle模块&#x1f384;效果&#x1f33a;代码&#x1f6f8;代码…

IvorySQL3.0:基于PG16.0最新内核,实现兼容Oracle数据库再升级

Oracle作为全球最大的数据库厂商之一&#xff0c;具有较高的市场知名度和份额。但随着数据处理需求日益增长&#xff0c;使用Oracle的企业可能面临一些挑战&#xff0c;如数据库复杂性、高昂维护成本、数据迁移和集成问题等&#xff0c;难以满足企业实时数据处理需求&#xff0…