سؤال

أواجه بعض المشاكل في استخدام Boost::locale (1.49) على Debian 7 GNU/Linux (إصدار دول مجلس التعاون الخليجي هو 4.6.3-1).يتم حفظ الكود في cp1251.يؤدي استخدام وظائف مثل "isalpha" (أو "boost::algorithm::is_alpha") إلى حدوث استثناء (bad_cast).يبدو أنه لا يوجد جانب مناسب لهذا الفحص.إليك الكود:

#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;
}

يعمل بدون استثناء على نظام التشغيل Windows 7 مع Visual Studio 2008.ومع ذلك، لا تزال هناك مشكلة واحدة:تم تعيين "debug500" على "خطأ" في هذه الحالة.إنه يعمل بشكل جيد فقط عندما يتم إنشاء اللغة على النحو التالي: std::locale loc(".1251").ولكن تظهر نفس المشكلة عندما يتم إنشاء الإعدادات المحلية عن طريق التعزيز: std::locale loc(boost::locale::generator().generate("ru_RU.cp1251"));.سأكون ممتنًا لو تمكن شخص ما من شرح الخطأ في الكود و/أو كيف يمكنني إجراء فحص مماثل (isalpha) باستخدام Boost وstd مع الإعدادات المحلية cp1251.

هل كانت مفيدة؟

المحلول

يستبدل:

unsigned char debug501 = 'Б';

مع:

char debug501 = 'Б';
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top