LINUX.ORG.RU

Qt4 - Как сделать транслит?


0

0

Необходимо переделать в транслит написанное кириллицей в одном поле ввода и поместить в другое. До этого все русские надписи делал через tr("...") с кодеком, установленным в utf8. Здесь никак не получается распознать, что за буква во входной строке:

QString addterm::latin(QString str)
{
    QString result;
    QByteArray arr = str.toLower().toUtf8();
    QByteArray alpha("абвгдежзиклнмнопрстуфхцчшщьыэюя");
    foreach(char i,arr)
    {
        if(i==alpha.at(0))
            result.append('a');
        if(i==alpha.at(1))
            result.append('b');
//и т.д.
    }
    return result;
}
При вводе любых цифр начинает радостно зафлуживать всё транслитерированным алфавитом по числу букв,т.е. все условные операторы дают true:) Это незнание Qt и его глюк?

★★★★

>При вводе любых цифр

Букв в смысле

wingear ★★★★
() автор топика

Qt не знаю, но догадываюсь, что русская буква в UTF8
в один байт не влезет.

lonki-lomki
()
Ответ на: комментарий от summatus

Спасибо большое,все работает. пришлось, правда, добавить 
for(int i=0x041;i<0x07a;i++)
            t[i]=QChar::QChar(i);
чтобы латиница тоже копировалась

wingear ★★★★
() автор топика
Ответ на: комментарий от wingear

Да забыл.

QString addterm::latin(QString str)
{
	QMap<QChar, QString> t;
	
	t[0x430] = "a";
	t[0x410] = "A";
	t[0x44f] = "ya";
	t[0x42f] = "Ya";

	QString result;

	foreach( QChar ch, str ) {
		result += ( t.contains( ch ) ) ? t[ch] : ch;
	}

	return result;
}

И естественно "t" надо определять где-нибудь в другом месте.

summatus
()
Ответ на: комментарий от summatus

здорово. Правда, там пробелы и прочее не нужно(хотя не знаю, есть ли они в юникоде) - после транслитерации оно должно в CLIPS отдаваться,есть риск нарваться на недопустимый символ, хотя для самой задачи так и надо.

wingear ★★★★
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.