Russian Qt Forum
Май 06, 2024, 18:12 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: транслит русских букв  (Прочитано 1828 раз)
barm12345
Новичок

Offline Offline

Сообщений: 21


Просмотр профиля
« : Февраль 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
Записан
barm12345
Новичок

Offline Offline

Сообщений: 21


Просмотр профиля
« Ответ #1 : Февраль 13, 2021, 12:33 »

и такой еще warning дает:
warning: overflow in implicit constant conversion [-Woverflow]
Записан
kambala
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 4727



Просмотр профиля WWW
« Ответ #2 : Февраль 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
Записан

Изучением C++ вымощена дорога в Qt.

UTF-8 has been around since 1993 and Unicode 2.0 since 1996; if you have created any 8-bit character content since 1996 in anything other than UTF-8, then I hate you. © Matt Gallagher
barm12345
Новичок

Offline Offline

Сообщений: 21


Просмотр профиля
« Ответ #3 : Февраль 13, 2021, 13:38 »

Огромное спасибо)
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.067 секунд. Запросов: 22.