vim或其他地方的文件编码和编码的基本原理

时间:2014-02-26 14:48:33

标签: vim unicode encoding utf-8

我不明白为什么VIM中有encodingfileencoding

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

VIM set encoding and fileencoding utf-8wiki of VIM about working with unicode

  

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

     

fileencoding设置特定文件的编码(local to local)   缓冲液)

vim如何在内部表示字符”vs“特定文件的编码”...转发Unicode与UTF-8?如果是这样,为什么用户会打扰前者?

任何提示?

2 个答案:

答案 0 :(得分:6)

你是对的;大多数程序都有固定的内部编码(说到C数据类型,即char,它们大多使用基础语言环境,可能无法表示所有字符,或UTF-8;或wchar(宽字符),可以代表Unicode范围)。选择主要由编程语言和可用的API驱动(因为必须来回转换是乏味且无效的。)

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

启发式

  • 只要所有字符都可识别,您就不需要关心了。
  • 如果某些文件看起来不正确,您必须教Vim通过'fileencodings'识别编码,或明确指定。
  • 如果某些字符没有显示正确,则需要切换'encoding'。使用utf-8,您可以放心使用。
  • 如果您仅在终端中遇到问题,请使用'termencoding'

正如您所看到的,虽然它可能让初学者感到困惑,但实际上您拥有所有可用的力量!

答案 1 :(得分:5)

我会以这样的方式说明我不是一个vim专家。

我认为你的想法存在缺陷:

  

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

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

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

vim将根据需要进行转换。它可以从Shift-JIS编码文件中读取,将数据内部存储为UTF-16,并以UTF-8发送/接收来自终端的I / O.我不确定为什么你想要改变vim的内部字节处理(再次,不是专家),但无论如何,如果你愿意,你可以改变那个设置。

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