【转】刨根究底字符编码【2.0版】(1):开篇

首先跟大家分享一个有趣的亲身经历。有一次,在网上我看到有程序员发了一个帖子,帖子题目乍一看让人感到惊愕,但细一想又让我会心一笑。

这个帖子的题目大致上是这样的:字符编码是不是让程序员最感到恶心的问题?

更有意思的是,这个帖子下面竟然还得到了不少程序员的认同和点赞。我也表示了认同和点了赞。

为什么对字符编码会有这样的看法呢?

字符编码像个幽灵

字符编码,看起来是一个不太受到关注的边缘主题,似乎与前端技术的新潮酷炫、数据结构与算法的高大上、Java/Go/MySQL等的实用都挨不上边。

但事实上,字符编码无疑是计算机世界里最基础、最重要的一个主题之一。

然而,这么基石性的主题,在计算机教材中却只是浮光掠影般地草草带过。网络上有关字符编码的介绍文章也大多错漏百出、谬误多多。

更为令人不解的是,甚至连一本深入介绍的专门著作都找不到。对此我一直很困惑,为什么就没有哪位大牛对这个如此基础、如此重要而又如此容易让人困惑的主题写一本专著进行介绍呢?

在编程实践中,如果没有用死磕到底的精神将字符编码的来龙去脉、前世今生彻底搞清楚,只要你涉及的技术领域稍微广泛一些,那么它终将会像幽灵一样挥之不去,导致时不时地被各种与它相关的“灵异”事件折磨得死去活来。

本人正是在经受了字符编码所带来的种种令人崩溃的痛苦之后,才在痛定思痛之余,最终痛下决心,誓要将它刨根究底。

字符编码涉及面广

字符编码的基础性、重要性,主要体现在它的涉及面太过于广泛。

向下,涉及到计算机的底层技术,甚至是硬件实现。

向上,几乎跟所有的操作系统、编程语言、应用程序都密切相关。

因此,要想真正搞明白字符编码问题,必须得从计算机的基本概念——位、字节、字等等开始,再结合不同的系统环境与编程环境,进行具体分析。

类似于字符编码这样基础、重要、应用广泛而又特别容易让人困惑的基石性领域,还有字节序(即大小端表示)、正则表达式、浮点数实现、日期时间处理等等。

这些领域,都差不多具有如下共同特点:

  • 非常基础,却又非常重要;
  • 看起来比较偏门,却又应用极为广泛;
  • 不实战的话感觉很简单,一旦实际工作中遇到了却又特别让人困惑;
  • 貌似与日常工作关系不大,却又往往会在关键时刻被它们折磨得死去活来。

真正经验老到的技术负责人在招聘技术人员时,往往不会将面试重点放在对当前流行技术和热门技术的考察上,而是会放在对上述这些容易被应聘者轻视的基础技术的考察上。

道理很简单,一方面是所谓的“基础不牢、地动山摇”,基础技术的扎实与否,决定了这个人未来的技术成长空间和对新技术的快速掌握能力。

而另一方面更重要的是,通过对这些看似偏门却又非常关键的基础技术的考察,可以看出一个人的学习能力,以及对技术真正的好奇心、热情和追求。

因为新潮、酷炫、热门的流行技术几乎人人都喜欢,因此追逐流行技术是人之常情,不足为奇。

只有对基础技术仍然抱有刨根究底的好奇心和热情,才真正地体现出了一个程序员的学习能力和技术追求。

根据我多年的经验来看,这是划分平庸程序员和优秀程序员的分水岭和分界线,几乎是百发百中,极少看走眼过。

压箱底的看家本领

上面所提到基石性领域中,字节序、正则表达式跟字符编码的关系又密切相关,尤其是字节序,直接影响字符编码的字节序列。

而由于正则表达式主要用于在字符串中查找、提取字符或子字符串,要想真正理解正则表达式,也离不开对字符编码的深入理解。

因此,对字符编码的深入理解,是一个程序员基本功中压箱底的看家本领,是一个程序员搭建自身技术体系大厦的重要基石。

为此,我会尽量从日常工作中必然会遇到的各种实际问题入手,为你顺藤摸瓜、抽丝剥茧,环环相扣、层层深入,尽可能让你获得一种打通了技术的任督二脉后一气周流、酣畅淋漓的畅快感,以及彻底搞懂了技术原理后原来如此、豁然开朗的痛快感。

将涉及到的内容

下面是本《刨根究底字符编码》系列文章将会涉及到的内容:

1)关键术语解释:位、字节、字与字长、字符集、编码、解码、字符编码、现代字符编码模型;

2)字符编码的由来;

3)ASCII字符编码方案;

4)扩展ASCII字符编码方案EASCII以及ISO/IEC 8859系列字符编码方案;

5)汉字编码方案:GB2312、GBK、GB18030、GB13000、全角与半角、CJK中日韩统一表意文字;

6)汉字编码中区位码、国标码(交换码)、内码(机内码)、外码(输入码)、字形码(输出码)的区别及关系;

7)ANSI编码;

8)代码页(Code Page)、微软与ANSI代码页;

9)Unicode编码方案的面世;

10)Unicode编码方案概述;

11)字符编码模型的演变与字节序;

12)Unicode字符集的编码方式:码点、码元、UTF-8、UTF-16、UTF-32;

13)微软为什么跟联通有仇——Windows记事本的字符编码方式;

14)深入剖析奇葩的Python字符编码;

15)Vim中的字符编码问题;

16)Unicode常见问题解答;

17)总结。

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

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

相关文章

数位dp模板 最高位最低位_无纸化办公入门指南(数位板篇)

居家办公的这段时间,你们有没有遇到无纸化办公的问题?作为一名编辑,在我社规定不能寄纸稿的情况下,看电子稿成了常态。如果是word版尚且可以批注,不影响工作效率。但如果是PDF呢?怎样保证改稿的效率&#x…

AQS

1 AQS抽象的队列同步器,AQS定义了一套多线程访问共享资源的同步器框架,许多同步类实现都依赖于它,如常用的ReentrantLock/Semaphore/CountDownLatch 首先AQS维护了一个volatile 修饰的state和一个FIFO的同步队列(多线程争用资源被…

屏幕录像专家6.0_迅捷屏幕录像工具和屏幕录像专家哪个更好用?

随着社会的发展,屏幕录像常常都需要使用,然而有些新手朋友就想知道,到底是电脑中自带的屏幕录像专家好用,还是迅捷屏幕录像工具好用,这两者都是当前使用率比较高的软件,今天小编就为大家分析分析&#xff0…

【转】刨根究底字符编码【2.0版】(2):关键术语解释

上一篇中讲道,字符编码所涉及的面非常广,向下的话,涉及到计算机的底层技术,甚至是硬件实现。 因此,这里就让我们从字符编码涉及到的最基本的术语讲起。大部分术语你可能都已经有了解了,但我们现在从字符编…

Cause: java.sql.SQLSyntaxErrorException: Table ‘Chun.user‘ doesn‘t exist Springboot+MybatisPlus报错

排错:yml配置没问题,可以连接到数据库,导包没问题,数据库里面也有这个库和表, 最终发现是因为表名大小写的问题,因为我直接连接的阿里云服务器上的mysql,而mysql在linux下表名是区分大小写的导…

浏览器字体大小设置_CSS之 浏览器解析样式的过程

阅读本文约需要10分钟大家好,我是你们的导师,经常看我朋友圈的同学应该知道,我每天会在微信上给大家免费提供以下服务!1、长期为你提供最优质的学习资源!2、给你解决技术问题!3、每天在朋友圈里分享优质的技…

angular实现国密算法sm2、sm3和sm4的ts版,基于sm-crypto库实现,前后端实现

ts版,js的话直接根据npm文档调用就可以了! ts提供的方法有问题,所以还换了个思路来实现!而且因为不是nodeJs环境所以const sm4 require(sm-crypto).sm4这个在ts里是报错的导致无法实现,如果是使用的是electron那么使…

【转】.net异步性能测试(包括ASP.NET MVC WebAPI异步方法)

很久没有写博客了,今年做的产品公司这两天刚刚开了发布会,稍微清闲下来,想想我们做的产品还有没有性能优化空间,于是想到了.Net的异步可以优化性能,但到底能够提升多大的比例呢?恰好有一个朋友正在做各种语…

win7关机快捷键_电脑快捷键大全(上)

Windows快捷键1单独按Windows:显示或隐藏“开始”功能表WindowsBREAK:显示“系统属性“对话框WindowsD显示桌面或回复桌面Windows M最小化所有窗口WindowsShiftM:还原最小化的窗口CrtlShiftN:新建文件夹WindowsE:打开“我的电脑”…

【转】ASP.NET Web API 使用Swagger生成在线帮助测试文档,支持多个GET

以下为教程: 在现有webapi项目中,nuget安装以下两个插件 swagger.net.ui swashbuckle 安装完毕后可以卸载Swagger.NET,此处不需要! 安装完毕后屏蔽以下代码 直接运行调试 在浏览器的目录后面加上/swagger即可跳转到swagger调试页 此时如果没有注释. 项目属性里添加xml注释…

idea提示“ cannot access xxxxxxxx.class“的解决方法,idea的bug

同一个包下的public类使用报错,应该是idea的bug: file -> Invalidate Caches / Restart

电脑屏保在哪里设置_手机屏保调成绿色能护眼?真的吗?

说到护眼,你首先想到的是什么颜色?估计90%的人都会不自觉的想到绿色!因为从小家长和老师都会跟我们说:眼睛累了就多看窗户外的绿色植物。久而久之,一说到护眼,大家脑海里第一个想到的就是绿色。你会看到不少…

电脑休眠和睡眠的区别_关机、睡眠、休眠的区别

都知道电脑有关机、睡眠、休眠三种休息模式,但是后两个选项使用的人非常少,大多数人每次用完电脑都会选择立即「关机」。有人是为了让电脑「休息」,有人是为了低碳精神,还有人是因为下班不关电脑要罚款,不管是什么原因…

SpringCloud:学习Docker安装zookeeper,注册服务

1.没镜像就拉取镜像 dockerhub中查看版本 官网 docker pull zookeeper:3.4.14 不加版本号也行,默认拉取最新版 创建并启动容器 docker run -p 2181:2181 --privilegedtrue --name zookeeper01 -d zookeeper –privilegedtrue 容器内用户开启root权限 docker ps…

win10固态硬盘分区 整数_惠普HP笔记本Win10改Win7系统教程

惠普HP笔记本和台式机目前都预装的Win10系统,当然Win7旗舰版才是很多用户喜欢的,不过换装Win7有很多方面比较麻烦,如BIOS设置、U盘启动及方分方面都是很多用户不熟悉的,这里小编就详细分享下惠普笔记本Win10改Win7系统教程(BIOS设…

SpringCloud:学习 Docker安装Consul,注册服务

1.拉取镜像 docker pull consul 2.启动容器 docker run -d -p 8500:8500 --restartalways --nameconsul consul:latest agent -server -bootstrap -ui -node1 -client0.0.0.0 创建容器时没有添加参数 --restartalways ,导致的后果是:当 Docker 重启时…

【转】WebApi 身份认证解决方案:Basic基础认证

参考路径:https://www.cnblogs.com/landeanfen/p/5287064.html 前言:最近,讨论到数据库安全的问题,于是就引出了WebApi服务没有加任何验证的问题。也就是说,任何人只要知道了接口的url,都能够模拟http请求去…

LeetCode每日打卡 - 汉明距离

位异或运算(^) 运算规则是:两个数转为二进制,然后从高位开始比较,如果相同则为0,不相同则为1。 比如:8^11. 8转为二进制是1000,11转为二进制是1011.从高位开始比较得到的是&#xff…

【转】Task和async/await详解

一、什么是异步 同步和异步主要用于修饰方法。当一个方法被调用时,调用者需要等待该方法执行完毕并返回才能继续执行,我们称这个方法是同步方法;当一个方法被调用时立即返回,并获取一个线程执行该方法内部的业务,调用者…

LeetCode每日打卡 - 反转每对括号间的子串

题解中有个更好的思路&#xff0c;stack存入的不是(的坐标&#xff0c;存入每次到左括号的字符串&#xff0c;拿到右括号就对其进行反转&#xff0c;更妙一些。 import java.util.Stack; class Solution {public String reverseParentheses(String s) {Stack<Integer> s…