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

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

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

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

字符编码像个幽灵

字符编码,看起来是一个不太受到关注的边缘主题,似乎与前端技术的新潮酷炫、数据结构与算法的高大上、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)总结。

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

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

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

  2. 【转】刨根究底字符编码之十六——Windows记事本的诡异怪事:微软为什么跟联通有仇?

    1. 当用一个软件(比如Windows记事本或Notepad++)打开一个文本文件时,它要做的第一件事是确定这个文本文件究竟是使用哪种编码方式保存的,以便于该软件对其正确解码,否则将显示为乱码. 一般 ...

  3. 【转】刨根究底字符编码之十三——UTF-16编码方式

    1. UTF-16编码方式源于UCS-2(Universal Character Set coded in 2 octets.2-byte Universal Character Set).而UCS- ...

  4. 【转】刨根究底字符编码之十一——UTF-8编码方式与字节序标记BOM

    一.UTF-8编码方式 1. 接下来将分别介绍Unicode字符集的三种编码方式:UTF-8.UTF-16.UTF-32.这里先介绍应用最为广泛的UTF-8. 为满足基于ASCII.面向字节的字符处理 ...

  5. 刨根究底字符编码之六——简体汉字编码中区位码、国标码、内码、外码、字形码的区别及关系

    简体汉字编码中区位码.国标码.内码.外码.字形码的区别及关系 GB2312.GBK.GB18030等GB类汉字编码方案的具体实现方式是怎样的?区位码是什么?国标码是什么?内码.外码.字形码又是什么意思 ...

  6. 【转】刨根究底字符编码之一——关键术语解释(上)

    声明:本系列文章参考了网上的大量资料,除了少部分资料由于未作大量修改(但基本也有少量修改,因为网上文章随意性较大,如若不改反而让人迷糊)而标明了出处之外,其余由于已作了大量改写,因此没有再一一说明,在 ...

  7. 【转】刨根究底字符编码【2.0版】(3):字符编码的由来、演变与ASCII码

    为什么需要字符编码 1. 计算机一开始发明出来时是用来解决数字计算问题的,后来人们发现,计算机还可以做更多的事,例如文本处理. 但计算机其实挺"笨"的,它只"认识&quo ...

  8. 【转】刨根究底字符编码之十二——UTF-8究竟是怎么编码的

    UTF-8究竟是怎么编码的 1. UTF-8编码是Unicode字符集的一种字符编码方式(CEF),其特点是使用变长字节数(即变长码元序列或称变宽码元序列)来编码.目前一般是1到4个字节,当然,也可以 ...

  9. 【转】刨根究底字符编码之十——Unicode字符集的字符编码方式

    一.字符编码方式CEF的选择 1. 由于Unicode字符集非常大(并且作为开放字符集还在不断扩展之中),有些字符的编号(即码点值)需要两个或两个以上字节来表示,而要对这样的编号进行编码,也必须使用两 ...

最新文章

  1. js remove 当前元素_D3.js入门教程
  2. 关键字static、const、volatile的作用
  3. php post aborted,php文件无法得到POST过来的数据
  4. MySQL数据库自动添加时间戳
  5. 在Spring中使用多个动态缓存
  6. linux高负载下彻底优化mysql数据库
  7. 基于c#的相关性分析_不同区间衰退路径下锂离子电池的性能相关性及温度适用性分析...
  8. The Internet Communications Engine (Ice) 跨平台异构通讯方案 第二弹-Hello world!
  9. Git 时光穿梭鸡 管理修改
  10. TFS2010安装与管理
  11. 等额本息PMT和PPMT推导计算公式
  12. vs code的php格式化
  13. 姿态估计1-03:FSA-Net(头部姿态估算)-白话给你讲论文-翻译无死角(1)
  14. 职场新人应该如何培养项目管理的能力?
  15. 样本均值,顺序统计量,样本中位数, 样本方差,样本标准差,直方图,核密度估计曲线,经验分布函数图,箱形图;matlab实现
  16. 深入理解什么是LSM-Tree
  17. 什么是BOSS业务?
  18. boost python异常处理_C++ boost.python折腾笔记
  19. python数据分析就业前景_数据分析师找工作的秘诀,从读懂招聘 JD 开始
  20. PhysicalDrive

热门文章

  1. zookeeper 安装和使用
  2. 设计模式 策略模式2 c++11
  3. 什么是大数据,怎么理解和应对大数据时代
  4. 201521123014 《Java程序设计》第11周学习总结
  5. JavaScript模式读书笔记 第3章 字面量和构造函数
  6. 关于浏览器模式和文本模式的困惑
  7. WinAPI: SetTextColor - 设置设备环境的文本颜色
  8. [Leedcode][JAVA][第11题][盛最多水的容器][双指针][贪心]
  9. linux系统命令光标移动,Linux 命令行 光标移动技巧及利用grep和find查找文件内容...
  10. 幅值与峰峰值的计算_电厂振动测量、计算基础及汽轮机组振动标准!