데비안 7 GNU/Linux에서 boost :: locale (1.49)을 사용하는 데 문제가 있습니다 (GCC 버전은 4.6.3-1). 코드는 cp1251에 저장됩니다. "isalpha"(또는 "boost :: algorithm :: is_alpha")와 같은 함수를 사용하면 예외 (bad_cast)가 발생합니다. 이 수표에는 적절한면이없는 것 같습니다. 여기에 코드입니다 :boost :: locale을 사용할 때 std :: isalpha가 bad_cast를 throw합니다.
#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;
}
그것은 비주얼 스튜디오와 윈도우 7에 예외없이 실행됩니다 2008 년 단 하나의 문제는 여전히있다 "debug500는"이 경우 false로 설정되어 있습니다. 로케일이 다음과 같이 생성 될 때만 잘 작동합니다 : std::locale loc(".1251")
. 그러나 로케일이 부스트에 의해 생성 될 때도 동일한 문제가 발생합니다 : std::locale loc(boost::locale::generator().generate("ru_RU.cp1251"));
. 누군가가 코드의 문제점을 설명하고 cp1251 로켈을 사용하여 boost 및 std를 사용하여 유사한 체크 (isalpha)를 수행하는 방법에 대해 감사 할 수 있습니다.
덕분에, 지금은 예외가 없다. 그러나 여전히 한 가지 문제가 있습니다.이 경우 "debug500"이 false로 설정됩니다. 나는 Visual Studio에 관해서 틀렸고, 다음과 같이 로케일이 생성 될 때 잘 동작한다 :'std :: locale loc (". 1251")'. 그러나 boost가 로케일을 생성 할 때도 같은 문제가 발생합니다 :'std :: locale loc (boost :: locale :: generator(). generate ("ru_RU.cp1251"));'. – Nemo
네, 저도 Б이 저에게 알파가 아니라고 말합니다 ... –