【计算机科普】制表符和编码格式

568 阅读7分钟

【计算机科普】制表符和编码格式

起因:我在使用vscode连接远程服务器编辑一个Makefile文件,在vscode使用tab键缩进默认是4个空格,然后在服务器进行make的时候格式不对, 因为Makefile默认命令command的缩进是8个空格。然后我就怀疑是不是编码格式不对导致的,最后检查编码是没问题的都是utf-8,实际上在服务器vim打开文件的tab制表符缩进就是8个空格,而我需要在vscode设置默认的tab宽度为8个空格和服务器保持一致。

注:一般文本的编码格式都保持统一的UTF-8

  • Tab制表符在不同的操作系统和编辑器中,默认的宽度是不一样的。
  • 操作系统:Tab制表符的宽度是可以指定的,在windows中一般为4个空格,在传统的Unix系统中通常被设置成8个空格,这种设置可以追溯到早期终端和打印机的标准,以适应文本对齐和间距要求。
  • 编辑器和 IDE:许多文本编辑器和集成开发环境(IDE)允许用户自定义 Tab 字符的宽度,以适应个人喜好和项目需求。这意味着在同一编辑器中,不同用户或不同项目之间 Tab 字符的宽度可能会有所不同。
  • 项目约定:在一些项目或团队中,可能会有制定统一的 Tab 宽度约定,以确保代码在不同环境下的一致性。这种约定通常会写入项目的代码风格指南或文档中。

【前置知识】

制表符是什么东西?

制表符(Tab)是计算机中的一个特殊字符,通常用于在文本中创建水平间距。在大多数编辑器和应用程序中,按下 Tab 键会插入一个制表符字符。制表符在文本处理中常用于缩进、对齐表格数据、切换字段等操作。

制表符的主要特征包括:

  1. ASCII 编码:在 ASCII 编码中,制表符的十进制值为 9,十六进制值为 0x09。
  2. 水平间距:制表符在显示时通常会将光标移动到下一个固定的位置,这个位置叫做制表位(tab stop)。在许多文本编辑器中,默认的制表位宽度是 8 个空格,但这个宽度可以根据用户设置或编程语言的规范发生变化。
  3. 缩进:在源代码中,制表符常用于缩进代码块,以表示逻辑结构。在 Makefile、C 语言、Python 等许多编程语言中,制表符用于表示代码层次结构。
  4. 多用途性:除了缩进外,制表符还可用于在表格数据中对齐列,实现快速对齐文本等多种用途。
  5. 显示方式:制表符实际上是一个特殊的控制字符,通常在文本编辑器或终端中显示为箭头、空格或其他特殊符号,表示制表位的位置。

编码格式是什么?

我的理解编码格式就是在计算机中规定了一个数据库去映射字符—》数字,如ASCII码格式,A的十进制表示是65,当字符成功转化成数字的时候,计算机就可以识别它,表示它了。那么为什么又需要不同的编码格式呢?实际上就是,不同的编码代表了不同范围的数据库,有的编码表示的字符集合更广,有中文的,英文的,其他国家语言的字符。

【详细说明】:

  1. 什么是编码格式

    • 编码格式是一种规则,用于将符号、字符、文本或其它数据转换为数字形式以便计算机能够处理。它实际上是一种映射关系,将字符或符号映射到数字编码上。
  2. 常见的编码格式

    • ASCII(美国信息交换标准代码) :包含标准化的字符编码,使用 7 位编码表示 128 个字符。每个字符对应一个唯一的数值。
    • Unicode:为全球所有语言字符设定了统一的编码方案,可以表示几乎所有的语言字符,每个字符对应一个唯一的代码点。
    • UTF-8、UTF-16、UTF-32:Unicode 字符编码的实现方式,分别表示不同的字符存储格式(变长编码方式)。
    • ISO-8859 系列:一系列针对不同语言的字符集编码规范。
    • EBCDIC(扩展二进制编码的十进制互换码) :IBM 主要用于大型机系统的字符编码方式。
  3. 不同编码格式的区别

    • ASCII vs Unicode:ASCII 只能表示基本拉丁字母、数字和符号,而 Unicode 可以表示全球各种语言的字符。
    • UTF-8 vs UTF-16:UTF-8 是变长编码,表示一个字符可能使用不同字节表示;UTF-16 使用固定 2 个或 4 个字节来表示字符。
    • 区别结构和内容:编码格式不仅定义了字符集,还定义了如何存储和解释这些字符。
  4. 编码格式的选择

    • 选择编码格式要考虑应用的语言需求、存储和传输效率等因素。
    • 在 Web 开发中,常使用 UTF-8 编码以兼容多种语言。
    • 在开发过程中要确保在不同系统和软件中的编码一致性。
  5. 乱码问题

    • 编码不一致或错误通常会导致乱码问题,即无法正确解析或显示文本。
    • 需要确保文本的编码格式正确,并避免不同编码格式之间的混淆或错误转换。

那么我们最常见的编码格式就是UTF-8 ,它是一种可变长度的Unicode字符编码方式,支持几乎所有语言的字符,包括各种文字、符号和表情符号。

关于 UTF-8 编码的特点:

  1. 广泛支持:UTF-8 是一种全球通用的字符编码方案,支持几乎所有语言的字符,包括各种文字、符号和表情符号。
  2. 变长编码:UTF-8 使用 1 到 4 个字节来表示一个字符,根据字符的不同范围进行变长编码,这样既能节省空间又能表示全球各种字符。
  3. 兼容性:UTF-8 能够兼容 ASCII 编码,ASCII 字符的编码和表示在 UTF-8 中保持不变,因此现有的 ASCII 文本在转换为 UTF-8 后仍然可以正确显示。
  4. Web标准:在 Web 编程和应用开发中,UTF-8 已成为事实上的标准,因为它可以处理多种语言的字符和文本,使得网页国际化和多语言支持更加便捷。
  5. 存储效率:UTF-8 的变长编码方式使得表示大部分常用字符(如英文、数字等)的文本时,与单字节编码方式相似,从而节省了存储空间。

如何在不同的服务器上查看文本文件的编码格式?

如何在ubuntu服务器查看编码格式?

方法一:使用 chardet 工具chardet 是一个用于检测文本文件编码的工具,它可以根据文件内容推测文件的编码类型。您可以通过安装 chardet 并对文件运行该工具来检测文件编码。

$ chardet Makefile
Makefile: utf-8 with confidence 0.99

方法二:使用vim工具打开文本文件,在 Vim 中,输入 :set fileencoding 可以显示文件的编码格式。

$ vim Makefile
# 打开文件后
--------Makefile--------
.PHONY=#(PHONY)

:set fileencoding
--------Makefile--------
# 结果如下
.PHONY=#(PHONY)

  fileencoding=utf-8     

如何在windows上查看文本的编码格式?

通过一般的文本编辑器都可以查看文本的编码格式,正常情况下都是显示在编辑器的底部。具体如下所示:

image.png

在vscode中可以直接在底部切换编码格式:

image.png

image.png