这个问题也发布在这个 SO 帖子中。
我有一个标准文本文件,与 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
您可以在启动 gedit 时强制编码为 UTF-8,例如,
如@filipe-brandenburger 所示,您在某处将默认编码设置为UTF-16LE。您可以通过使用 UTF-16LE 编码查看奇怪的输出来验证这一点。
更新 - 编码可以与文件 uri 一起存储。
Gnome 编辑器显然将编码类型与文件 uri 一起缓存。你可以看到我在移动文件。例如,
(见中文文本)
(英文文本)
现在打开而不指定编码。
(英文文本)
但是将文件移回会导致它使用不同的编码。
(见中文文本)