Russian Qt Forum

Qt => Вопросы новичков => Тема начата: barm12345 от Февраль 13, 2021, 12:19



Название: транслит русских букв
Отправлено: barm12345 от Февраль 13, 2021, 12:19
Добрый день!
В Qt3 использовал фукцию транслита (локаль KOI-8), в Qt5 локаль UTF-8, дает warnings:

src/my.cpp:200:7: warning: multi-character character constant [-Wmultichar]

std::string translit(const std::string& r)
{
  std::map<char,std::string> tbl;
  tbl['А']= "A";
  tbl['Б']="B";
  tbl['В']="W";
  tbl['Г']="G";
...

std::string ret;
  for (int i=0; i<(int)r.length(); ++i) {
    if(tbl.find(r) != tbl.end())
      ret+=tbl[r];
    else
      ret+=r;
  }

Пробовал иcпользовать qPrintable(), не помогает, подскажите плиз, как правильно записать для UTF-8


Название: Re: транслит русских букв
Отправлено: barm12345 от Февраль 13, 2021, 12:33
и такой еще warning дает:
warning: overflow in implicit constant conversion [-Woverflow]


Название: Re: транслит русских букв
Отправлено: kambala от Февраль 13, 2021, 13:12
при чем тут Qt, если ты работаешь с std?

русские буквы в UTF-8 занимают 2 байта, а ты пытаешься их засунуть в однобайтный char. Думаю, проще всего будет работать с char16_t / std::u16string, если ты не на С++20.
Код
C++ (Qt)
std::map<char16_t, std::string> tbl = {
 {u'А', "A"},
 // ...
};
https://en.cppreference.com/w/cpp/language/character_literal


Название: Re: транслит русских букв
Отправлено: barm12345 от Февраль 13, 2021, 13:38
Огромное спасибо)