文件编码的基本原理以及在vim或其他地方的编码

文件编码的基本原理以及在vim或其他地方的编码,vim,unicode,encoding,utf-8,Vim,Unicode,Encoding,Utf 8,我不明白为什么VIM中有编码和文件编码 据我所知,文件就像一个字节数组。当我们创建一个文本文件时,我们创建一个字符(或符号)数组,并使用编码X将这个字符数组编码为一个字节数组,然后将字节数组保存到磁盘。在文本编辑器中读取时,它使用编码X对字节数组进行解码,以重建原始字符数组,并根据字体用图形显示每个字符。在这个过程中,只涉及一个编码 在,就是说, 编码设置vim如何在内部表示字符。Utf-8 对于大多数风格的Unicode来说都是必需的 fileencoding设置特定文件的编码(本地到本地)

我不明白为什么VIM中有
编码
文件编码

据我所知,文件就像一个字节数组。当我们创建一个文本文件时,我们创建一个字符(或符号)数组,并使用编码X将这个字符数组编码为一个字节数组,然后将字节数组保存到磁盘。在文本编辑器中读取时,它使用编码X对字节数组进行解码,以重建原始字符数组,并根据字体用图形显示每个字符。在这个过程中,只涉及一个编码

在,就是说,

编码设置vim如何在内部表示字符。Utf-8 对于大多数风格的Unicode来说都是必需的

fileencoding设置特定文件的编码(本地到本地) 缓冲区)

vim如何在内部表示字符”“vs”特定文件的编码”。。。重新编译Unicode与UTF-8?如果是这样,用户为什么要为前者烦恼呢


有什么提示吗?

我先说我无论如何都不是vim专家

我认为你思维中的缺陷在于:

在文本编辑器中读取时,它使用编码X对字节数组进行解码,以重建原始字符数组,并根据字体用图形显示每个字符

问题是,vim不负责在这里呈现glyph。vim从文件中读取字节,在内部存储它们,并将字节发送到终端,终端使用字体呈现字形。vim本身从未接触过字体,因此从未真正需要理解“字符”。它只需要在内部处理在文件、内部缓冲区和终端之间来回移动的字节

因此,可能涉及三种不同的字节存储:

  • (内部)
vim将根据需要在这些之间转换。它可以读取Shift JIS编码的文件,将数据作为UTF-16在内部存储,并以UTF-8向终端发送/接收I/O。我不确定您为什么要更改vim的内部字节处理(同样,不是专家),但在任何情况下,您都可以更改该设置


假设如下:如果将
编码设置为Unicode编码,则可以安全地处理可能遇到的任何字符。但是,在某些情况下,这些Unicode编码可能太大,无法在非常有限的系统中轻松地放入内存,因此在这种情况下,如果您知道自己在做什么,您可能希望使用更专业的编码。

您是对的;大多数程序都有固定的内部编码(就C数据类型而言,要么是
char
,它主要使用基础语言环境,可能无法表示所有字符,要么是UTF-8;要么是
wchar
(宽字符),可以表示Unicode范围)。这种选择主要是由编程语言和可用的API驱动的(因为来回转换既繁琐又没有效率)

Vim,因为它支持多种平台(从开发开始的旧Amiga开始),面向程序员,并且高度高级的用户允许配置内部表示

启发法
  • 只要所有的角色都是可识别的,你就不必在意
  • 如果某些文件看起来不正确,则必须通过
    “fileencodings”
    教导Vim识别编码,或明确指定编码
  • 如果某些字符显示不正确,则需要切换
    “编码”
    。有了
    utf-8
    ,您就安全了
  • 如果您仅在终端上有问题,请使用
    'termcodening'
正如您所看到的,虽然初学者可能会感到困惑,但实际上您拥有所有可用的功能