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

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

Страниц: [1]   Вниз
  Печать  
Автор Тема: QString побайтовый вывод  (Прочитано 6158 раз)
AlphaGh0St
Гость
« : Январь 22, 2015, 09:11 »

Всем привет!
Выполняю побайтовый вывод строки:
Код:
    QString str = "hello";

    for (int i = 0; i < str.size(); ++i)
    {
        uchar byte = str[i].unicode();
        qDebug("str[%d] = %c", i, byte);
    }
В выводе получаю:
Цитировать
str[0] = h
str[1] = e
str[2] = l
str[3] = l
str[4] = o

А если QString инициализировать строкой "привет", то в выводе получим:
Цитировать
str[0] = ?
str[1] = @
str[2] = 8
str[3] = 2
str[4] = 5
str[5] = B

Подскажите, как вывести русские символы?
Благодарю.
Записан
Пантер
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 5876


Жаждущий знаний


Просмотр профиля WWW
« Ответ #1 : Январь 22, 2015, 09:14 »

Код
C++ (Qt)
ushort QChar::​unicode() const
 
Сравни возвращаемое значение.
Записан

1. Qt - Qt Development Frameworks; QT - QuickTime
2. Не используйте в исходниках символы кириллицы!!!
3. Пользуйтесь тегом code при оформлении сообщений.
AlphaGh0St
Гость
« Ответ #2 : Январь 22, 2015, 09:18 »

А как было бы правильно?
Записан
Пантер
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 5876


Жаждущий знаний


Просмотр профиля WWW
« Ответ #3 : Январь 22, 2015, 10:04 »

Кириллица в юникоде представлена не одним байтом. Почитай про UTF.
Записан

1. Qt - Qt Development Frameworks; QT - QuickTime
2. Не используйте в исходниках символы кириллицы!!!
3. Пользуйтесь тегом code при оформлении сообщений.
AlphaGh0St
Гость
« Ответ #4 : Январь 23, 2015, 16:12 »

Про UTF читал. Ладно, поставим вопрос иначе: нужно побайтно вывести строку русских символов. Пусть хранимую не в QString. Как это можно сделать?
Записан
Пантер
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 5876


Жаждущий знаний


Просмотр профиля WWW
« Ответ #5 : Январь 23, 2015, 16:15 »

QString::toLocal8Bit()
Записан

1. Qt - Qt Development Frameworks; QT - QuickTime
2. Не используйте в исходниках символы кириллицы!!!
3. Пользуйтесь тегом code при оформлении сообщений.
AlphaGh0St
Гость
« Ответ #6 : Январь 27, 2015, 19:14 »

Возник другой вопрос: а как из юникода перевести русские символы в ASCII?
Записан
kambala
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 4727



Просмотр профиля WWW
« Ответ #7 : Январь 27, 2015, 19:28 »

в ASCII не существует русских символов. какая конкретно кодировка тебя интересует (куда вывести хочешь)?
Записан

Изучением 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
AlphaGh0St
Гость
« Ответ #8 : Январь 27, 2015, 19:55 »

Вывести хотя бы в дебаг посимвольно. Примерно так:
Код:
 любой_контейнер str = "привет";

    for (int i = 0; i < str.size(); ++i)
    {
        uchar byte = str[i];
        qDebug("str[%d] = %c", i, byte);
    }
Записан
kambala
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 4727



Просмотр профиля WWW
« Ответ #9 : Январь 27, 2015, 23:21 »

в виндовой консоли там CP866 кажется, за креатор не скажу. юниксы вроде утф8 спокойно понимают.
Код
C++ (Qt)
QString str = "тест";
for (int i = 0; i < str.size(); ++i)
   qDebug() << "str[" << i << "] = " << str.at(i);
Цитировать
str[ 0 ] =  'т'
str[ 1 ] =  'е'
str[ 2 ] =  'с'
str[ 3 ] =  'т'
проверял в Qt 5, выводил в консоль креатора. значит, утф8 она понимает.
« Последнее редактирование: Январь 27, 2015, 23:26 от kambala » Записан

Изучением 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
AlphaGh0St
Гость
« Ответ #10 : Январь 28, 2015, 10:37 »

Дело в том, что мне нужно каким-то боком представить русские символы одним байтом...
Записан
__Heaven__
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2130



Просмотр профиля
« Ответ #11 : Январь 28, 2015, 10:58 »

Гуглите "cp866 таблица"
Записан
kambala
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 4727



Просмотр профиля WWW
« Ответ #12 : Январь 28, 2015, 23:28 »

ну сконвертируй строку в вин1251 например, или в cp866 как выше подсказывают
Записан

Изучением 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
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


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