C ++扩展的Ascii字符

时间:2009-03-06 10:15:46

标签: c++ extended-ascii

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

8 个答案:

答案 0 :(得分:18)

请记住,没有扩展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(或使用签名char时为< 0)?

答案 1 :(得分:7)

Char可以是签名或未签名。但这并不重要。您实际上想要检查每个字符是否是有效的ASCII。这是一个积极的,非模棱两可的检查。您只需检查每个字符是否都是> = 0和< = 127.其他任何内容(无论是正数还是负数,“扩展ASCII”或UTF-8)都无效。

答案 2 :(得分:2)

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

答案 3 :(得分:2)

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

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

但是你可能会使用区域设置功能。更好的是,知道字符编码数据的来源。试图猜测它就像试图猜测进入数据库字段的数据格式。它可能会进入,但垃圾进入,垃​​圾出来。

答案 4 :(得分:2)

是否有人再使用isascii了?

char c = (char) 200;

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

答案 5 :(得分:0)

检查它们不是负值的值

答案 6 :(得分:0)

bool detect(const signed char* x) {
  while (*x++ > 0);
  return x[-1];
}

答案 7 :(得分:-2)

{{1}}
  

试试这段代码