【问题标题】:Linux vs. Windows: How does the console render unicode characters?Linux 与 Windows:控制台如何呈现 unicode 字符?
【发布时间】:2010-11-17 20:23:08
【问题描述】:

这是一个相当低级(在“接近金属”的意义上的低级)问题。

我想知道你们中的任何人是否可以向我指出如何在 Windows 中接收 Unicode 字符(或任何字符代码,但我对 Unicode 标准特别感兴趣)控制台的文档、解释等,好的 ol' cmd.exe(使用代码页 65001)和 Linux 中的 xterm 以 LC_CTYPE=en_US.UTF-8 开头,查找相应的字形(以及位置)。

我知道在 Windows 中可能更难了解,但我找不到太多信息。

谢谢。

【问题讨论】:

    标签: windows linux unicode encoding


    【解决方案1】:

    据我所知,cmd.exe 绑定到您定义为“非 Unicode 程序代码页”的任何 256 个字符的代码页或任何它被称为的代码页。

    更详细地说,如果我将上述设置设置为日语,cmd.exe 会突然用日元符号替换反斜杠(系统上的所有其他非 Unicode 应用程序也是如此)并正确解释 ShiftJIS 代码。将它设置为荷兰语会给我一个重音 I(我忘了哪个),而另一个代码页会在同一个字符上给出一个半填充的垂直实体。

    不是 Unicode。 Unicode 可以让我同时做这三个。

    【讨论】:

    • 不一定是 256 个字符:shift-JIS 实际上是一个 MBCS。是的,它在 Windows 中确实存在日元/反斜杠混淆,这非常可悲,可能来自 DOS...
    • 澄清一下,所有 Windows 中的日文字体总是 这样做。应用是否 Unicode 并不重要!不相信我?在charmap 中查找 MS Mincho 中的 U+005C,或查看blogs.msdn.com/b/michkap/archive/2007/03/28/1972239.aspx
    【解决方案2】:

    控制台使用带有从代码页创建的编码的 TextWriter。这意味着写入的字符使用代码页的特定 Encoding 对象编码为字节。

    【讨论】:

    • 他非常具体地谈论 cmd.exe,它不是,我上次检查过的 .Net 应用程序,因此它在逻辑上不使用 TextWriter。除非有另一个我不知道的 TextWriter。
    • 是的,我刚刚查过了。它在 Process Explorer 中并未完全显示为黄色。
    • 好吧,如果我们把范围缩小到控制台本身,它根本不支持 unicode 字符。如果当前编码不是 UTF-8,并且您尝试显示 UTF-8 文件,它将使用当前编码对其进行解码,这当然会使 ASCII 字符范围之外的任何内容变得混乱。如果当前编码是 UTF-8,它仍然不支持 unicode 字符,只支持编码为 UTF-8 的字符。
    • 控制台支持 Unicode 很好......只是当您将其视为文件或使用它使用当前代码页的“OEM”API 时。那,我不完全确定 UTF-8 代码页真的可以在控制台上运行......
    【解决方案3】:

    控制台不支持 Unicode。 :)

    【讨论】:

    • 是的,这就是我之前暗示的。
    • 在最近的 Linux 系统上并非如此。
    • 对于最近的定义,控制台至少可以追溯到 1996 年。如果您指的是终端仿真器,那么对 UTF-8 的支持是在 1999 年添加到 XTerm 中的,并且之前已经存在于其他一些终端仿真器中。
    • 终端模拟器速度更快,但控制台(如:X 未运行时通常看到的环境)是在最近几年才学会的。
    • 我很确定我在 1998 年 1 月搬家之前在控制台上玩过它,并且相关文档存在于内核 2.0.1 中。如果我的记忆是正确的,我不必使用特殊选项编译内核,只需发送正确的转义序列。最近可能发生的情况是在常见发行版中默认启用它(ISTR,他们在 2005 年左右全局切换到 UTF-8)。
    猜你喜欢
    • 2011-03-09
    • 2011-08-10
    • 2016-12-13
    • 2012-03-11
    • 2019-03-11
    相关资源
    最近更新 更多