gpt4 book ai didi

linux - 为什么每个文本编辑器都要写一个额外的字节(UTF-8)?

转载 作者:太空狗 更新时间:2023-10-29 11:41:42 25 4
gpt4 key购买 nike

我正在研究 Ubuntu 16.04 (Xenial Xerus)。我发现文本编辑器会向文本文件写入额外的字节 (UTF-8)。当我试图通过测试时,它给我带来了一些问题。

所以我们有一个字符串“Extra byte”,其大小为 UTF-8 中的 10 个字节。当我尝试通过 gedit 将其写入文件时,例如,我得到一个大小为 11 字节的文件。另外,nano使大小相同。甚至 "echo "Extra byte"> filename"也返回 11 个字节。

但是,当我们尝试这样的事情时:

#include <fstream>

int main(){
std::ofstream file("filename");

file<<"Extra byte";
return 0;
}

或者这个:

with open("filename_py",'w+',encoding='UTF-8') as file:
file.write('Extra byte')

我们得到大小为 10 字节的文件。为什么?

最佳答案

您看到的是 newline character (通常在编程语言中表示为 \n ,在 ASCII 中它是十六进制 0a,十进制 10):

$ echo 'foo' > /tmp/test.txt
$ xxd /tmp/test.txt
00000000: 666f 6f0a foo.

hex-dump tool xxd 显示该文件由 4 个字节、十六进制 66(ASCII 小写字母 f)、两次十六进制 65(小写字母 o)和换行符组成。

您可以使用 -n禁用添加换行符的命令行开关:

$ echo -n 'foo' > /tmp/test.txt
$ xxd /tmp/test.txt
00000000: 666f 6f foo

或者您可以使用 printf相反(更符合 POSIX):

$ printf 'foo' > /tmp/test.txt
$ xxd /tmp/test.txt
00000000: 666f 6f foo

另见 'echo' without newline in a shell script .

大多数文本编辑器还会在文件末尾添加换行符;如何防止这种情况取决于确切的编辑器(通常您可以在保存前在文件末尾使用删除)。还有各种命令行选项可以在事后删除换行符,请参阅 How can I delete a newline if it is the last character in a file? .

文本编辑器通常会添加一个换行符,因为它们处理文本行,而 POSIX 标准定义了 text lines end with a newline :

3.206 Line
A sequence of zero or more non- <newline> characters plus a terminating <newline> character.

另见 Why should text files end with a newline?

关于linux - 为什么每个文本编辑器都要写一个额外的字节(UTF-8)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43306855/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com