这个问题也发布在这篇文章。
我有一个标准文本文件,用 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
(见中文版)