【问题标题】:Weird ASCII/Unicode Character奇怪的 ASCII/Unicode 字符
【发布时间】:2012-07-30 20:57:40
【问题描述】:

Peter Thiel's CS183 Notes 有一个带有 ASCII 字符串的文件名:“Peter Thiel 的 CS183.pdf”,或者至少在 Windows 资源管理器中是这样打印出来的。但是,在调试我的程序时,我注意到 ' 字符不是普通的撇号,它的(无符号字符)值为 146,而不是预期的 39。

为了测试它是否是我的程序中的错误,我重命名了文件并删除了字符并重新输入了撇号。果然,这次我的程序显示了正确的值。因此我推断它必须是 Unicode 字符(因为我在 ASCII 表中没有看到它)。但是,它不是多字节字符,因为字符串中的下一个字节是“s”。

有人可以帮忙解释一下这里发生了什么吗?

【问题讨论】:

    标签: c++ unicode ascii


    【解决方案1】:

    你的错误是认为这个字符串是 ASCII。

    如果您使用的是字符编码为 CP-1252(参见http://en.wikipedia.org/wiki/Windows-1252)的 Windows 机器,那么您的“代码”146 是 一种引用(参见维基百科页面上的表格)。

    【讨论】:

      【解决方案2】:

      它是 Windows 代码页 CP1252 中的右单引号,既不是 ASCII(或 ISO-8859-1)也不是任何形式的 Unicode。

      【讨论】:

        【解决方案3】:

        这是一个右单引号而不是单引号:

        http://www.ascii-code.com/

        如您所说,39 是单引号,但文件必须使用右单引号命名,Windows Latin-1 扩展字符中的十进制值 146,CP-1252。

        【讨论】:

        • 不是ASCII;它是 Windows CP1252。 ASCII 仅低于 128。
        • @prosfilaes 我认为你是对的,asciitable.com" 已将其完全列为其他内容。
        • @chacham15 ASCII 从未更新,因此不可能有过时的 ASCII 表。
        • @R.MartinhoFernandes,Ascii 更新(在 1968 年和 1986 年)。但通常 Ascii 周围的混乱是由于将 Ascii 与具有超过位置 127 的字符的各种其他代码混淆造成的。
        • @chacham15 人们通常所说的“扩展 ascii”根本不是 ascii。
        猜你喜欢
        • 2014-04-09
        • 1970-01-01
        • 2014-01-11
        • 1970-01-01
        • 2014-09-14
        • 2021-07-15
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多