使用时,bless
我可以看到我的gedit
输出是 ASCII。可以gedit
处理某种 Unicode 吗?
答案1
答案2
所以我给 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
重定向会创建一个ASCIIecho
文件(自己尝试一下!)file
$ echo ユニコーン >> rainbows; file rainbows
rainbows: UTF-8 Unicode text
添加非 ASCII 字符会自动更改编码吗?不会,只会强制file
看到编码实际上是 UTF-8,因为它不能再局限于 ASCII。
总结
不用担心,您的“ASCII”文本文件是伪装的 UTF-8 文件(无法检测到它们的 UTF-8 性),并且将按照您的需要和期望进行解析。
*你很有兴趣问这个问题,所以也许你已经明白了作者的意思本文告诉我们。这篇文章进一步解释了编码,特别是为什么ASCII!=UTF-8
以及为什么你需要了解你是如何编码文本的。我提取了:
关于编码最重要的事实
如果您完全忘记了我刚才解释的一切,请记住一个极其重要的事实。如果不知道字符串使用的编码,那么拥有该字符串是没有意义的。您不能再将头埋在沙子里,假装“纯”文本是 ASCII。
根本不存在纯文本。
如果您有一个字符串,在内存中、在文件中、或在电子邮件消息中,您必须知道它采用什么编码,否则您无法解释它或正确地将其显示给用户。
几乎每一个愚蠢的“我的网站看起来像胡言乱语”或“当我使用重音符号时她无法阅读我的电子邮件”问题都归咎于一个天真的程序员,他没有理解一个简单的事实:如果你不告诉我某个字符串是使用 UTF-8 还是 ASCII 还是 ISO 8859-1(Latin 1)还是 Windows 1252(西欧)编码的,你就无法正确显示它,甚至无法弄清楚它在哪里结束。有超过一百种编码,超过代码点 127,一切都将不复存在。
**有趣的事实:@ByteCommander 向我指出,file
只查看文件的前 50-100kb,因此如果在文本文件开头远处有非 ASCII 字符,则file
仍会认为它是 ASCII。