【问题标题】:ASCII in Windows XP and Ubuntu LinuxWindows XP 和 Ubuntu Linux 中的 ASCII
【发布时间】:2009-06-09 01:11:46
【问题描述】:

我用 MVSC++ 编写了一个程序,它输出内存内容(ASCII 格式)。我在 Windows 控制台中看到的 ASCII 似乎与我在各种 ASCII 表(笑脸、菱形、俱乐部、右箭头等)中看到的相匹配。该程序需要在 Linux 下编译(确实如此),但 ASCII 输出看起来完全不同。一些符号是相同的,但其余的则如此不同。有什么办法可以改变终端显示 ASCII 码的方式吗?

编辑:程序正确执行,只是 ASCII 显示不同。

【问题讨论】:

    标签: windows linux ascii


    【解决方案1】:

    ASCII 定义从 0x00 到 0x7f 的字符代码。其他所有内容(0x80-0xff)都不是 ASCII 标准的一部分,并且取决于操作系统定义为要显示的字符的内容。但是,您提到的字符(笑脸、菱形、俱乐部等)是 ASCII“控制字符”的表示,通常没有视觉表示。 Windows 允许您打印这些字符并查看它为它们定义的字形,但您的 Linux 可能会将控制字符解释为格式化控制代码(它们是),而不是打印相应的字形。

    【讨论】:

    • @Adam:这个问题与 UTF-8 编码有关,这是一个完全不同的话题,乔尔的文章很好地涵盖了这个话题:joelonsoftware.com/articles/Unicode.html
    • @Greg:谢谢,你说得对。我会删除我的第一条评论,以免其他人像我一样困惑。
    • @Greg,那是所以错了。 ASCII 定义 0x00 到 0x7f,包括 0x20 以下的控制字符。不反对(还:-),我会给你一个机会来解决它(或充分论证你的情况)。
    • @Pax:谢谢,你说的很对,我的术语不准确。我已经更正了答案。
    • 是的,我实际上并不确定您的意思是 ASCII 是否定义了仅针对可打印范围打印的字素(这将是一个我会接受的有争议的情况)。 +1。
    【解决方案2】:

    您所看到的是 IBM 最初在 PC 首次在世界上发布时包含的“扩展”字符集。是的,我们要回到强大的恐龙时代,所以请耐心等待。这些字符生活在 7F 美元以上,屏幕上对它们的符号的解释甚至会受到所选字体的影响。大多数 linux 发行版现在都使用 UTF-8(或类似的东西),因此,安装的字体可能具有完全不同的符号,甚至缺少字形。如果您要比较相同数据的“ASCII”表示(这是用词不当,因为它不是真正的 ASCII),它可能完全匹配也可能不完全匹配,因为您必须在两种显示字体中具有相同的“字形”渲染正确地看到类似的表示。如果可能,请尝试让您的 Windows 和 Linux 安装都使用相同的字体,然后看看是否有变化。

    【讨论】:

      【解决方案3】:

      如果您的浏览器支持 Unicode(并且您安装了正确的字体),您将在下面看到它们。 您可以复制并粘贴到支持 unicode 的编辑器(记事本)中。另存为 UTF-16BE 然后,如果您在 HexEditor 中打开,您将看到每个 char 可见字形的所有 unicode 代码。 例如,第一个 ascii char Null 具有 Unicode 可见字形 0x2639 在 c\c++\java 中你可以像 \u2639 一样使用它。 它不是空字符,而是视觉表示。

      http://en.wikipedia.org/wiki/Code_page_437

      ☹☺☻♥♦♣♠•◘○◙♂♀♪♫☼►◄↕‼¶§▬↨↑↓→←∟↔▲▼!"#$%&'()*+,-./ 0123456789:; ?@@abcdefghijklmnopqrstuvwxyz []^_` abcdefghijklmnopqrstuvwxyz {|} ┴┬├─┼╞╟╚╔╩╦╠═╬╧╨╤╥╙╘╒╓╫╪┘┌█▄▌▐▀αß÷πΣσμτΦΘΩδ²∞φε∩≡σμτΦΘΩδ²∞ε∩≡±±≤⌠⌡■ⓓ°∙·≥√ⁿ

      【讨论】:

        猜你喜欢
        • 2011-12-23
        • 2011-04-18
        • 1970-01-01
        • 1970-01-01
        • 2020-05-30
        • 2014-06-14
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多