【问题标题】:C++ Extended Ascii charactersC++ 扩展 Ascii 字符
【发布时间】:2009-03-06 10:15:45
【问题描述】:

如何检测 C++ 字符数组中是否存在扩展 ASCII 值(128 到 255)。

【问题讨论】:

    标签: c++ extended-ascii


    【解决方案1】:

    请记住,没有扩展 ASCII 这样的东西。 ASCII 过去和现在仅定义在 0 到 127 之间。以上所有内容要么无效,要么需要使用 ASCII 以外的已定义编码(例如 ISO-8859-1)。

    请阅读The Absolute Minimum Every Software Developer Absolutely, Positively Must Know About Unicode and Character Sets (No Excuses!)

    除此之外:迭代它并检查任何大于 127 的值(或使用签名 chars 时为

    【讨论】:

    • @shoosh:再次阅读您的链接:“该术语的使用有时会受到批评,因为它可能被错误地解释为 ASCII 标准已更新为包含超过 128 个字符或该术语明确标识单个编码,两者都不真实”
    • @shoosh:我知道某些编码可以统称为“扩展 ASCII”,但每当我看到有人使用该术语时,他们通常不知道这一点。所以我不鼓励使用它,并尝试澄清我看到它在哪里使用。
    • @MSalters 这是 -1 的最蹩脚的借口。 @shoosh 扩展 ascii 不是标准的。
    • @Beau:即使该定义可以被认为是正确的,它也具有高度误导性,因为正如您所指出的,它不是指单一编码,而是指一类编码.另外:“扩展 ASCII”意味着它是某种 ASCII,这是错误的。 “基于 ASCII 的编码”、“与 ASCII 兼容的编码”或类似的术语会更正确。
    • 确实,每次听到“扩展ASCII”,我的第一反应就是问:“哪个?”。
    【解决方案2】:

    Char 可以有符号或无符号。不过,这并不重要。您实际上想检查每个字符是否是有效的 ASCII。这是一个积极的、明确的检查。您只需检查每个字符是否同时 >=0 和

    【讨论】:

      【解决方案3】:

      现在没有人使用 isascii 了吗?

      char c = (char) 200;
      
      if (isascii(c))
      {
          cout << "it's ascii!" << endl;
      }
      else
      {
          cout << "it's not ascii!" << endl;
      }
      

      【讨论】:

        【解决方案4】:

        确保您知道相关机器的字节顺序,并使用按位与掩码检查最高位:

        if (ch & 128) {
          // high bit is set
        } else {
          // looks like a 7-bit value
        }
        

        但您可能应该为此使用一些语言环境功能。更好的是,知道输入的字符编码数据是什么。试图猜测它就像试图猜测进入数据库字段的数据格式。它可能会进,但垃圾进,垃圾出。

        【讨论】:

        • 嗨 Lee B。我的应用程序充当 Java 前端和 DCE 后端应用程序之间的中间件。 DCE 服务器在中间件的外参数中填充了一些垃圾字符。我必须将输出参数内容发送到 FE。在发送垃圾字符时,中间件转储核心。
        • 我必须将 char* 从 DCE 转换为字符串,然后将其传递给前端。
        • 你最好把 128 转换成 char,否则 ch 会被转换成 int,这样 128 就不再是高位了。
        【解决方案5】:

        遍历数组并检查每个字符是否不在 128 到 255 范围内?

        【讨论】:

          【解决方案6】:

          检查它们不是负数的值

          【讨论】:

            【解决方案7】:
            bool detect(const signed char* x) {
              while (*x++ > 0);
              return x[-1];
            }
            

            【讨论】:

              【解决方案8】:
              (char) c = (char) 200;
              
              if (isascii(c))
              {
                  cout << "it's ascii!" << endl;
              }
              else
              {
                  cout << "it's not ascii!" << endl;
              }
              

              试试这个代码

              【讨论】:

              • “试试这个代码”不是一个很好的解释。为什么这解决了答案?
              猜你喜欢
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 2013-03-19
              • 1970-01-01
              • 2020-08-23
              • 1970-01-01
              • 2022-01-14
              • 2010-11-22
              相关资源
              最近更新 更多