gedit 可以创建 Unicode 文件吗?

H2O*_*aCl 5 gedit unicode encoding ascii utf-8

使用bless我可以看到我的gedit输出是 ASCII。可以gedit处理某种Unicode吗?

Bru*_*uni 8

当您单击另存为时,在左下角您将获得一些可供选择的编码,选择添加和删除(最后一个条目),您将获得可用编码列表,包括各种 unicode 编码。

在此处输入图片说明


Zan*_*nna 7

所以,我给了 Bruni 一张他们回答的截图,以显示他们的意思。但后来我测试了结果。您确实可以在 gedit 或任何其他文本编辑器中选择 UTF-8 编码。但是,除非这些文件包含非 ASCII 字符**,否则它们将被检测为 ASCII。实际上,如果您通过任何方法创建“纯文本”(可疑术语*)文件,情况也是如此,并且此答案具有以下原因:

当您的所有字符 < 128 ASCII 和 UTF-8 相同时。ASCII 是 UTF-8 的子集(也是 latin1 和许多其他编码格式的子集)。

我挑战任何人来测试这个答案;我只能通过向系统添加非 ASCII 字符来在我的系统上创建一个“UTF-8”文本文件,即使我的所有终端、我所有的文本编辑器和我的locale都设置为 UTF-8:

$ echo unicorns > rainbows; file rainbows
rainbows: ASCII text
Run Code Online (Sandbox Code Playgroud)

重定向echo会创建一个显示file为 ASCII的文件(请自行尝试!)

$ echo ????? >> rainbows; file rainbows
rainbows: UTF-8 Unicode text
Run Code Online (Sandbox Code Playgroud)

附加非 ASCII 字符会自动更改编码吗?不,只是强制file看到,编码是UTF-8,因为它不再局限于ASCII。

TL; 博士

不用担心,您的“ASCII”文本文件是伪装的 UTF-8 文件(无法检测到它们的 UTF-8-ness),并且会根据您的需要和预期进行解析。


*你有足够的兴趣问,所以也许你已经明白这篇文章的作者在告诉我们什么。这篇文章解释了更多关于编码的信息,特别是,为什么ASCII!=UTF-8以及为什么你需要知道你如何编码你的文本。我已经提取:

关于编码的一个最重要的事实

如果你完全忘记我刚刚解释的一切,请记住一个非常重要的事实。在不知道它使用什么编码的情况下拥有一个字符串是没有意义的。你不能再把头埋在沙子里,假装“纯”文本是 ASCII。

没有纯文本这样的东西。

如果您在内存中、文件中或电子邮件中有一个字符串,则您必须知道它的编码方式,否则您将无法正确解释它或向用户显示它。

几乎所有愚蠢的“我的网站看起来像胡言乱语”或“当我使用口音时她无法阅读我的电子邮件”问题都归结为一个天真的程序员,他不明白一个简单的事实,即如果你不告诉我一个特定的字符串是使用 UTF-8 或 ASCII 或 ISO 8859-1(拉丁语 1)或 Windows 1252(西欧)编码的,您根本无法正确显示它,甚至无法弄清楚它的结尾。有超过一百种编码和代码点 127 以上,所有赌注都关闭了。


**有趣的事实:@ByteCommander 向我指出file只查看文件的前 50-100kb,所以如果文本文件的开头有非 ASCII 字符,那么file仍然会认为它是 ASCII。