linux - 通过 Vim 保存平面文件向创建新行的文件添加一个不可见的字节

标签 linux vim character-encoding diff flat-file

标题不是很具体,但我无法确定正确的关键词,因为我不确定这里发生了什么。出于同样的原因,我的问题可能有重复,因为 .如果是这样的话:抱歉!

我有一个通过平面文件接收数据的 Linux 应用程序。我不知道这些文件是如何生成的,但我可以毫无问题地阅读它们。这些都是短文件,每个文件只有一行。

出于测试目的,我尝试修改其中一个文件并将其重新注入(inject)到应用程序中。但是当我这样做时,我可以在日志中看到它在消息末尾添加了一个神秘的分页符(导致应用程序无法识别该消息)...

举例来说,假设我收到一个名为original 的平面文件,其中包含以下内容:

ABCDEF

我复制了这个文件并将其命名为copy

  • 如果我使用“diff”命令比较这两个文件,它会说它们是相同的(正如我所期望的那样)
  • 如果我通过 Vi 打开 copy 然后退出而不更改也不保存任何内容,然后使用“diff”命令,它说它们是相同的(正如我所期望的那样)
  • 如果我通过 Vi 打开复制,然后不做任何更改而保存它,然后使用“diff”命令,我有以下内容(我添加了布局目的的点):

diff original copy 1c1 < ABCDEF \ No newline at end of file --- .> ABCDEF

如果我比较两个文件的大小,我可以看到原始 是 71 字节,而 副本 是 72。

当我保存文件时,文件的格式似乎发生了变化。我首先想到了一个编码问题,所以我在 Vim 上使用“:set list”命令来查看不可见字符。但是对于这两个文件,我可以看到以下内容:

ABCDEF$

我已经找到了其他方法来做我的测试,但这个问题仍然困扰着我,我真的很想了解它。所以,我的两个问题是:

  1. 这里发生了什么?
  2. 如何在不创建这个神秘的分页符的情况下修改这样的文件?

感谢您的帮助!

最佳答案

默认情况下,Vim 会假设您编辑的文件以“换行”字符结尾。这是 UNIX 领域的正常行为。但是您的程序正在读取的"file"对我来说更像是“流”,因为它们不以换行符结尾。

为了确保那些"file"在写入时没有换行符,在写入之前设置以下选项:

:set binary noeol

参见 :help 'eol'

关于linux - 通过 Vim 保存平面文件向创建新行的文件添加一个不可见的字节,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24306744/

相关文章:

linux vim 在编辑器中粘贴目录路径

linux - ip 未被拒绝 - iptables

c - meminfo_proc_show() 的枚举和 si_meminfo() 的变量集在哪里?

vim - 在vim中删除周围的空格

excel - ColdFusion XLS "Export"和字符编码

php - 在 PHP 中发送电子邮件时发件人和名称中的编码问题?

c# - 不正确的字符串值 : '\xC2\x9Fe 10...' for column

linux - Bash 句柄退出多个进程

linux - 如何为 OpenSSL 提供自定义编译器/链接器标志?

vim - 你最喜欢 Vim 中 HTML、Javascript 和 CSS 的折叠方法(或 secret 技术)是什么?