2009-10-19 10 views
2

boost :: esprit affirme à boost :: esprit :: char_class :: ascii :: isalnum()Comment puis-je compiler boost :: spirit pour un type de caractère non signé?

lors du passage des caractères ASCCI> 127.

J'ai changé toutes mes variables privées de std :: string à

typedef std::basic_string<unsigned char, std::char_traits<unsigned char>, std::allocator<unsigned char> > 
u_string; 

mais encore booster utilise std: .string en interne. Qu'est-ce que je dois faire ?

+1

Postez votre code et dites-nous exactement ce que vous voyez le faire lorsque vous l'exécutez. – razlebe

Répondre

3

La solution est assez simple:

au lieu de

using namespace boost::spirit::ascii; 

j'utilise maintenant

using namespace boost::spirit::iso8859_1; 

Ce Constate tous charcters dans le jeu de caractères ISO8859.

1

Le problème est bien sûr qu'il n'y a pas de caractères ASCII au-dessus de 127. L'interprétation de octet = 8 bits est plus récente que cela.

Si vous utilisez ISO8859-1 ou UTF-8 comme encodage de caractères, vous devez configurer votre compilateur correctement. Cette option micht appelée "default unsigned char" ou quelque chose comme ça, pour tenir compte du fait que la norme ISO-8859 n'utilise des valeurs de caractère au-dessus 127.