β

字符串,那些你不知道的事

有赞技术团队 79 阅读
字符串,那些你不知道的事

Everything you thought you knew about strings is wrong.

也许你会诧异,字符串有什么难的,即便遇到乱码的情况随便 Google 下就能找到解决方法,但是这样你不觉得有种被动的感觉嘛,我觉得和学习任何东西一样,学习编程首要是学习其思想,知道某事物为什么(why)要这么做,至于如何做(how)那只是前人提出的解决方案,我们可以参考,顺便掌握下来。

本文下面首先讲解字符、字符串、编码、ASCII、Unicode、UTF-8 等一些基本概念,然后会简单介绍在使用计算机时是如何与编码打交道的。 希望大家在阅读完本文后,都能对 string 有一全新的认识。

为什么需要字符编码

当我们谈到字符串(string或text)时,你可能会想到“计算机屏幕上的那些字符(characters)与符号(symbols)”,你正在阅读的文章,无非也是由一串字符组成的。但是你也许会发现,你无法给“字符串”一明确定义,但是我们就是知道,就像给你一个苹果,你能说出其名字,但是不能给出准确定义一样。这个问题先放一放,后面我再解释。

我们知道,计算机并不能直接处理操作字符与符号,它只认识 0、1 这两个数字,所以如果想让计算机显示各种各样的字符与符号,就必须定义它们与数字的一一映射关系,也就是我们所熟知的字符编码(character encoding)。你可简单的认为,字符编码为计算机屏幕上显示的字符与这些字符保存在内存或磁盘中的形式提供了一种映射关系。字符编码纷繁复杂,有些专门为特定语言优化,像针对简体中文的编码就有 EUC-CN HZ ;针对日文的 EUC-JP ,针对英文的 ASCII ;另一些专门用于多语言环境,像后面要讲到的 UTF-8

我们可以把 字符编码 看作一种解密密钥(decryption key),当我们收到一段字节流时,无论来自文件还是网络,如果我们知道它是“文本(text)”,那么我们就需要知道采用何种字符编码来 解码 这些字节流,否则,我们得到的只是一堆无意义的符号,像 ������。

单字节编码

计算机最早起源于以英文为母语的美国,英文中的符号比较少,用七个二进制位就足以表示,现在最常见也是最流行的莫过于 ASCII 编码,该编码使用 0 到 127 之间的数字来存储字符(65表示“A”,97表示“a”)。

字符串,那些你不知道的事

我们知道一个字节是 8 位,ASCII 编码其实只使用了其中的低 7 位,还剩下 1 位。很多人就想着可以利用这最高的一位来表示更多的可见字符,由于 IBM 是那时最有名的 OEM,其制定的编码规则影响范围也最广。

字符串,那些你不知道的事

随着时间的推进,计算机的使用范围扩展到西方欧洲国家,像法国

作者:有赞技术团队
Thoughts, stories and ideas.
原文地址:字符串,那些你不知道的事, 感谢原作者分享。

发表评论