C++扩展ASCII字符

3
如何在C++字符数组中检测扩展ASCII值(128到255)的存在。
8个回答

20

4
@shoosh: 请再次阅读你的链接:“有时人们会批评该术语的使用,因为它可能被错误地解释为ASCII标准已经更新以包括超过128个字符,或者该术语明确地标识了单个编码,这两种说法都是不正确的。” - Mehrdad Afshari
2
@shoosh:我知道有些编码可以被统称为“扩展ASCII”,但每当我看到有人使用这个术语时,他们通常并不知道这一点。因此,我不鼓励使用它,并在看到它被使用时尽力澄清。 - Joachim Sauer
@MSalters 这是最无聊的 -1 借口。@shoosh 扩展 ASCII 不是标准。 - Tim Matthews
3
即使那个定义可能被认为是正确的,但它非常误导,因为正如你所指出的,它并不是指单一的编码方式,而是指一类编码方式。另外,“扩展ASCII”意味着它是某种ASCII,这是错误的。 “基于ASCII的编码方式”,“与ASCII兼容的编码方式”或类似的术语将是更正确的术语。 - Joachim Sauer
2
每次我听到“扩展ASCII”这个词,我的第一反应就是问:“哪一个?” - André Caron
显示剩余2条评论

8

Char(字符)可以是有符号或无符号的。但这并不重要。实际上,您想要检查每个字符是否为有效的ASCII码。这是一项积极的、明确的检查。您只需检查每个字符是否同时大于等于0且小于等于127。任何其他情况(无论是正数还是负数,"扩展ASCII码"还是UTF-8编码)都是无效的。


3

现在还有人使用isascii吗?

char c = (char) 200;

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

2

请确保您知道所讨论的计算机的字节序,然后使用位与掩码检查最高位:

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

但是,您应该使用可能适用于此的区域设置函数。更好的方法是要了解数据输入的字符编码。试图猜测它就像试图猜测进入数据库字段的数据格式一样。它可能会被接受,但是垃圾输入,垃圾输出。


你好,Lee B。我的应用程序充当Java前端和DCE后端应用程序之间的中间件。 DCE服务器在中间件的outparam中填充了一些垃圾字符。我必须将outparam内容发送到FE。在发送垃圾字符时,中间件会崩溃。 - ilan
我需要将来自DCE的char*转换为字符串,然后传递给前端。 - ilan
最好将128转换为char,否则ch将被转换为int,在这种情况下,128不再是高位。 - MSalters

1

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


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

0

检查它们的值是否为负数


-3
(char) c = (char) 200;

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

尝试这段代码。

"尝试这段代码" 不是一个好的解释。为什么它能解决问题? - Sterling Archer

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接