gedit 标准文本文件的奇怪编码

gedit 标准文本文件的奇怪编码

这个问题也发布在这篇文章

我有一个标准文本文件,用 cat 可以完美显示:

$ cat myfile.txt
v0[shape = Mrecord, label = ""]

当我使用 xxd 检查确切的行结尾时,我得到了以下信息:

$ xxd myfile.txt
00000000: 7630 5b73 6861 7065 203d 204d 7265 636f  v0[shape = Mreco
00000010: 7264 2c20 6c61 6265 6c20 3d20 2222 5d0a  rd, label = ""].

但是当我尝试使用 gedit 打开它时,我得到了一些非拉丁语言的奇怪编码。gedit 出了什么问题?以下是用于重现的完整源代码:

$ cat main.cpp
#include <fstream>
int main(int argc, char **argv)
{
    std::ofstream myfile("myfile.txt");
    myfile << "v0[shape = Mrecord, label = \"\"]\n";
    myfile.close();
    return 0;
}

以下是我的编译行:

g++ main.cpp -o main

此外,我还附加了 gedit 屏幕的图像文件:

在此处输入图片描述

编辑:(建议的评论输出)

$ gedit --list-encodings | grep -Fx UTF-8
UTF-8
$ gedit --encoding UTF-8 myfile.txt
$ file -bi myfile.txt
text/plain; charset=us-ascii

答案1

您可以在启动 gedit 时强制将编码设置为 UTF-8,例如,

\gedit --encoding UTF-8 myfile.txt

某些地方,您的默认编码设置为 UTF-16LE,如 @filipe-brandenburger 所指出的。您可以使用 UTF-16LE 编码来验证这一点,以查看奇怪的输出。

\gedit --encoding UTF-16LE myfile.txt

更新——编码可能与文件 uri 一起存储。

Gnome 编辑器显然将编码类型与文件 uri 一起缓存。你可以在移动文件时看到这一点。例如,

echo "Hello there." > testfile.txt
\gedit --encoding UTF-16LE testfile.txt

(见中文版)

mkdir tempdir
mv testfile.txt tempdir
cd tempdir
\gedit --encoding UTF-8 testfile.txt

(英文原文)

现在打开时无需指定编码。

\gedit testfile.txt

(英文原文)

但将文件移回会导致它使用不同的编码。

mv testfile.txt ..
cd ..
\gedit testfile.txt

(见中文版)

相关内容