我正在使用Ubuntu 16.04 (Xenial Xerus)。我发现文本编辑器会向文本文件写入额外的字节 (UTF-8)。当我试图通过测试时,这给我带来了一些问题。
因此,我们有一个字符串“Extra byte”,其大小为 UTF-8 格式的 10 个字节。例如,当我尝试通过gedit将其写入文件时,我得到一个大小为 11 字节的文件。此外,nano 的尺寸相同。即使“echo“额外字节”> 文件名”也会返回 11 个字节。
然而,当我们尝试这样的事情时:
#include <fstream>
int main(){
std::ofstream file("filename");
file<<"Extra byte";
return 0;
}
Run Code Online (Sandbox Code Playgroud)
或这个:
with open("filename_py",'w+',encoding='UTF-8') as file:
file.write('Extra byte')
Run Code Online (Sandbox Code Playgroud)
我们得到大小 = 10 字节的文件。为什么?
您看到一个换行符(通常在编程语言中表示为\n,在 ASCII 中是十六进制 0a,十进制 10):
$ echo 'foo' > /tmp/test.txt
$ xxd /tmp/test.txt
00000000: 666f 6f0a foo.
Run Code Online (Sandbox Code Playgroud)
hex-dump工具xxd显示该文件由4个字节组成,十六进制66(ASCII小写字母f),两倍十六进制65(小写字母o)和换行符。
您可以使用-n命令行开关来禁用添加换行符:
$ echo -n 'foo' > /tmp/test.txt
$ xxd /tmp/test.txt
00000000: 666f 6f foo
Run Code Online (Sandbox Code Playgroud)
或者您可以使用printf(更符合 POSIX 标准):
$ printf 'foo' > /tmp/test.txt
$ xxd /tmp/test.txt
00000000: 666f 6f foo
Run Code Online (Sandbox Code Playgroud)
大多数文本编辑器还会在文件末尾添加换行符;如何防止这种情况取决于确切的编辑器(通常您可以在保存之前在文件末尾使用删除)。还有各种命令行选项可以在事后删除换行符,请参阅如何删除换行符(如果它是文件中的最后一个字符)?。
文本编辑器通常会添加换行符,因为它们处理文本行,并且 POSIX 标准定义文本行以换行符结尾:
3.206 行由零个或多个非字符加上一个终止字符组成的
序列。<newline><newline>
另请参阅为什么文本文件应以换行符结尾?
| 归档时间: |
|
| 查看次数: |
1116 次 |
| 最近记录: |