3

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

4

8 回答 8

20

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

请阅读每个软件开发人员绝对、绝对必须了解 Unicode 和字符集的绝对最低要求(没有借口!)

除此之外:迭代它并检查任何值> 127(或使用signed chars时<0)有什么问题?

于 2009-03-06T10:18:32.403 回答
8

Char 可以有符号或无符号。不过,这并不重要。您实际上想检查每个字符是否是有效的 ASCII。这是一个积极的、明确的检查。您只需检查每个字符是否同时 >=0 和 <= 127。其他任何内容(无论是正数还是负数,“扩展 ASCII”或 UTF-8)都是无效的。

于 2009-03-06T11:04:35.647 回答
3

现在没有人使用 isascii 了吗?

char c = (char) 200;

if (isascii(c))
{
    cout << "it's ascii!" << endl;
}
else
{
    cout << "it's not ascii!" << endl;
}
于 2012-02-07T23:27:44.180 回答
2

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

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

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

于 2009-03-06T10:42:22.737 回答
1

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

于 2009-03-06T10:17:43.980 回答
0

检查它们不是负数的值

于 2009-03-06T10:18:18.753 回答
0
bool detect(const signed char* x) {
  while (*x++ > 0);
  return x[-1];
}
于 2009-03-06T10:18:41.670 回答
-3
(char) c = (char) 200;

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

试试这个代码

于 2018-03-26T14:58:02.720 回答