[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [locale] ru_RU.koi8r
Leon Kanter wrote me:
> >
> > Будут у qt2, у SO5.2 - там же charset берется из имени.
> > Вроде ты же с этим сталкивался.
>
> Как оказалось, не берется. Другие примеры есть?
Hi!
Вот за qt2 я не уверен, как говорится по тексту:
Запомним эти локали:
static const char * const probably_koi8_rlocales[] = {
"ru", "ru_SU", "ru_RU", "russian", 0 };
Далее все проверяется здесь (я сократил):
QTextCodec* QTextCodec::codecForLocale()
...
char * lang = qstrdup( getenv("LANG") );
char * p = lang ? strchr( lang, '.' ) : 0;
// И так p + 1 - после точки, у нас "koi8r"
...
if( p && *p == '.' ) {
// if there is an encoding and we don't know it, we return 0
// User knows what they are doing. Codecs will believe them.
localeMapper = codecForName( lang );
if ( !localeMapper ) {
// Use or codec disagree.
localeMapper = codecForName( p+1 );
}
}
Я искал что либо похожее на "koi8r" для codecForName - не нашел,
похоже что localeMapper по прежнему нуль.
и так p+1 это "koi8r", lang - "ru_RU.koi8r"
Идем далее:
if ( !localeMapper || !(p && *p == '.') ) {
// if there is none, we default to 8859-1
// We could perhaps default to 8859-15.
if ( try_locale_list( iso8859_2locales, lang ) )
localeMapper = codecForName( "ISO 8859-2" );
else if ( try_locale_list( iso8859_3locales, lang ) )
localeMapper = codecForName( "ISO 8859-3" );
else if ( try_locale_list( iso8859_5locales, lang ) )
localeMapper = codecForName( "ISO 8859-5" );
...
А вот тут как раз засада - try_locale_list не найдет полный lang:
else if ( try_locale_list( probably_koi8_rlocales, lang ) )
localeMapper = ru_RU_hack( lang );
Его нет в probably_koi8_rlocales.
Так что может все же обойтись каноническим видом,
и не ломать сложившуюся систему?
--
С наилучшими пожеланиями, Евгений Бырганов.
Best regards, Eugene Byrganov.
mailto:E.B.Byrganov@inp.nsk.su
work - http://www.inp.nsk.su/