首页 文章

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

提问于
浏览
4

我不明白为什么在VIM中有 encodingfileencoding .

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

VIM set encoding and fileencoding utf-8中,它指的是wiki of VIM about working with unicode

encoding设置vim如何在内部表示字符 . 对于大多数Unicode来说,Utf-8是必需的 . fileencoding设置特定文件的编码(缓冲区本地)

How vim shall represent characters internally " vs " encoding for a particular file ”...转发Unicode与UTF-8?如果是这样,为什么用户会为前者烦恼呢?

任何提示?

2 回答

  • 5

    你're right; most programs have a fixed internal encoding (speaking of C datatypes, that'是 char ,它主要使用底层语言环境,可能无法表示所有字符,或者UTF-8;或 wchar (宽字符),可表示Unicode范围) . 选择主要由编程语言和可用的API驱动(因为必须来回转换是乏味且无效的) .

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

    启发式

    • 只要所有字符都可识别,您就不需要关心 .

    • 如果某些文件看起来不正确,您必须教Vim通过 'fileencodings' 识别编码,或明确指定它 .

    • 如果某些字符没有显示正确,则需要切换 'encoding' . 使用 utf-8 ,您可以放心使用 .

    • 如果您只在终端出现问题,请拨打 'termencoding' .

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

  • 6

    我将通过说我不是任何方式的vim专家来作为序言 .

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

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

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

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

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

    假设如下:如果将 encoding 设置为Unicode编码,则're safe to be able to handle any possible character you may encounter. However, in some circumstances those Unicode encodings may be too large to comfortably fit into memory in very limited systems, so in this case you may want to use a more specialised encoding if you know what you'正在执行 .

相关问题