2009-03-06 10 views

Répondre

2

Effectuez une itération sur la matrice et vérifiez que chaque caractère ne se situe pas entre 128 et 255.

+0

+1 pour être 36 secondes plus rapide que moi ;-). –

+4

Ascii question stupide obtenir un Ansi stupide. +1 –

+0

-1, char est souvent signé. Dans ce cas char (130) <129! – MSalters

0

Vérifiez les valeurs qu'ils ne sont pas négatives

13

S'il vous plaît rappelez-vous qu'il n'y a pas une telle chose comme ASCII étendu. ASCII a été et est seulement défini entre 0 et 127. Tout ce qui précède est invalide ou doit être dans un codage défini autre que ASCII (par exemple ISO-8859-1).

Veuillez lire The Absolute Minimum Every Software Developer Absolutely, Positively Must Know About Unicode and Character Sets (No Excuses!).

Autre que cela: qu'est-ce qui ne va pas avec itération sur elle et vérifier pour toute valeur> 127 (ou < 0 en utilisant char s signé)?

+0

-1 pour être complètement faux: http://en.wikipedia.org/wiki/Extended_ASCII – shoosh

+1

@shoosh: relisez votre lien: "L'utilisation du terme est parfois critiquée, car il peut être interprété à tort que la norme ASCII a été mis à jour pour inclure plus de 128 caractères ou que le terme identifie sans ambiguïté un codage unique, les deux étant fausses " –

+0

@shoosh: Je suis conscient que certains encodages peuvent être appelés collectivement" ASCII étendu ", mais chaque fois que je voir quelqu'un utiliser ce terme, ils ne le savent généralement pas. Je déconseille donc son utilisation et j'essaie de clarifier où je le vois. –

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

Assurez-vous que vous connaissez le boutisme de la machine en question, et il suffit de cocher le bit avec Bitwise ET masque:

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

Mais il y a des fonctions probablement locale, vous devriez utiliser pour cette . Mieux encore, SAVEZ quelles sont les données d'encodage des caractères qui arrivent. Essayer de deviner c'est comme essayer de deviner le format des données entrant dans les champs de votre base de données. Il pourrait y avoir des déchets, mais des déchets.

+0

hi Lee B. Mon application agit comme un intergiciel entre le frontal Java et l'application backend DCE. le serveur DCE remplit un caractère indésirable dans l'outparam du middleware. Je dois envoyer le contenu de param hors à la FE. lors de l'envoi du char indésirable, le noyau des dumps middleware. – ilan

+0

Je dois convertir le char * de l'ETCD en chaîne, puis le transmettre à l'entrée. – ilan

+0

Vous feriez mieux de convertir 128 en char, sinon ch sera converti en int, auquel cas 128 n'est plus le bit haut. – MSalters

6

Char peut être signé ou non signé. Cela n'a pas vraiment d'importance, cependant. Vous voulez réellement vérifier si chaque caractère est ASCII valide. C'est un contrôle positif, non ambigu. Vous vérifiez simplement si chaque caractère est à la fois> = 0 et < = 127. Toute autre chose (qu'elle soit positive ou négative, "Extended ASCII" ou UTF-8) n'est pas valide.

1

Personne n'utilise plus isascii?

char c = (char) 200; 

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