Domanda

Ho alcuni problemi con l'utilizzo di Boost :: Locale (1.49) su Debian 7 GNU / Linux (versione di GCC è 4.6.3-1).Il codice viene salvato in CP1251.Usando funzioni come "isalpha" (o "boost :: algoritmo :: is_alpha") finisce con eccezione (Bad_cast).Sembra che non ci sia faccetta adeguata per questo assegno.Ecco il codice:

#include <iostream>

#include <boost/locale.hpp>

int main ()
{
  boost::locale::generator gen;
  std::locale loc(gen.generate("ru_RU.cp1251"));
  unsigned char debug501 = 'Б';
  bool debug500 = std::isalpha(debug501, loc);
  std::cout<< debug500;

  return 0;
}
.

Funziona senza eccezione su Windows 7 con Visual Studio 2008. Tuttavia, c'è ancora un problema: "Debug500" è impostato su FALSE in questo caso.Funziona bene solo quando è generato la locale come questa: std::locale loc(".1251").Ma lo stesso problema viene visualizzato quando la locale è generata da Boost: std::locale loc(boost::locale::generator().generate("ru_RU.cp1251"));. Sarei grato se qualcuno potesse spiegare cosa c'è che non va nel codice e / o come posso fare un controllo simile (ISALPHA) utilizzando Boost e STD con CP1251 Locale.

È stato utile?

Soluzione

Sostituisci:

unsigned char debug501 = 'Б';
.

Con:

char debug501 = 'Б';
.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top