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

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

Страниц: 1 ... 3 4 [5] 6   Вниз
  Печать  
Автор Тема: Вывод русских символов в консоль  (Прочитано 61237 раз)
OKTA
Гость
« Ответ #60 : Октябрь 14, 2014, 09:50 »

Конечно, могут стоять другие настройки. Поэтому попробуй для перестраховки использовать WinApi-шные функции в случае с виндой.
UINT WINAPI GetConsoleCP(void);
BOOL WINAPI SetConsoleCP(_In_  UINT wCodePageID);
Записан
OKTA
Гость
« Ответ #61 : Октябрь 14, 2014, 09:55 »

Да а что в кодировках понимать. Это просто разные системы кодирования символов. Т.е. например в одной кодировке символ 'A' будет означать 10110101, а в другой 10000101, соответственно перед каждой манипуляцией с выводом текста, надо знать, на какой кодировке работает устройство, чтобы правильно перекодировать символы и не было кракозябр. И все, ничего больше понимать не надо. Разве что не забывать хранить все в unicode и уже потом кодировать в любые другие кодировки..
Записан
8Observer8
Гость
« Ответ #62 : Октябрь 14, 2014, 10:18 »

Могу ли я сразу учесть и Windows и Linux? Через директивы условной компиляции #ifdef

Подвох с unicode не понял. Можно же хранить кириллицу в std::string и даже в сишных строках char*, разве нет?
« Последнее редактирование: Октябрь 14, 2014, 10:19 от 8Observer8 » Записан
OKTA
Гость
« Ответ #63 : Октябрь 14, 2014, 10:21 »

Конечно все можно учесть, на то и Qt))
Да неважно, где ты хранить будешь!
Главное, чтобы ты хранил тектстовые данные в юникодовской кодировке и всегда отталкивался от этого.
Записан
OKTA
Гость
« Ответ #64 : Октябрь 14, 2014, 10:27 »

Был у меня случай когда-то. Приходили данные с сервера и я наивно запихивал их сразу в QString. В итоге долго удивлялся и не мог понять - как это так - некоторые данные читаются нормально, а другие кракозябрами, ведь QString хранит все в юникоде?? В итоге все оказалось, как всегда с кодировками - сначала узнай, в какой кодировке данные, перекодируй в юникод и только потом сохраняй и не допускай(или внимательно следи) скрытого перекодирования (как раз в случае QString).
Записан
8Observer8
Гость
« Ответ #65 : Октябрь 14, 2014, 10:37 »

Не подскажешь аналоги этих функций в Linux?
Код
C++ (Qt)
UINT WINAPI GetConsoleCP(void);
BOOL WINAPI SetConsoleCP(_In_  UINT wCodePageID);
 
Записан
OKTA
Гость
« Ответ #66 : Октябрь 14, 2014, 10:52 »

Почитай вот это http://perlgeek.de/en/article/set-up-a-clean-utf8-environment
Не прямой ответ, но есть откуда оттолкнуться.
Записан
8Observer8
Гость
« Ответ #67 : Октябрь 14, 2014, 10:58 »

Спасибо тебе большое! Я ещё такое нашёл по поводу unicode: http://www.e-reading.me/chapter.php/136170/75/Blanshet,_Sammerfild_-_QT_4__programmirovanie_GUI_na_S++.html
Записан
OKTA
Гость
« Ответ #68 : Октябрь 14, 2014, 11:07 »

Да пожалуйста)
Если хочешь насобачиться работать с кодировками - сделай просто две программы (помню они есть у тебя - клиент и сервер). И пускай Сервер шлет Клиенту данные в разных кодировках, которые ты будешь задавать вручную на стороне Сервера. А Клиент пускай принимает и переводит все в юникод для хранения. (И конечно, вместе с текстовыми данными, Сервер должен отправлять и название кодировки).
Записан
8Observer8
Гость
« Ответ #69 : Октябрь 14, 2014, 11:15 »

Хорошо! Спасибо! Сделаю и здесь выложу

Как я понял, кириллицу нельзя сохранять в файл с помощью std::fstream и нужно использовать QFile или std::wfstream. Правильно ли я понял?
Записан
8Observer8
Гость
« Ответ #70 : Июль 09, 2015, 16:44 »

Вот такое решение: http://blog.harrix.org/?p=2829

Код
C++ (Qt)
#include <QCoreApplication>
#include <QTextCodec>
#include <iostream>
#include <string>
 
const char* convertFromUtfToLocal(const char* str)
{
   return QString::fromUtf8(str).toLocal8Bit().data();
}
 
int main(int argc, char *argv[])
{
   QCoreApplication a(argc, argv);
 
   QTextCodec::setCodecForLocale(QTextCodec::codecForName("IBM 866"));
 
   std::cout << convertFromUtfToLocal("Введите имя: ");
   std::string s;
   std::cin >> s;
   std::cout << convertFromUtfToLocal("Привет, ") << s << "!\n";
 
   return a.exec();
}
Записан
ivanmara
Гость
« Ответ #71 : Сентябрь 07, 2015, 15:25 »

Добрый день. Подскажите как ввести с консоли строку с пробелами (в ввели несколько слов нажали Enter) ?
Записан
__Heaven__
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2130



Просмотр профиля
« Ответ #72 : Сентябрь 07, 2015, 15:30 »

Лучше перефразируйте вопрос.

А так: вводите в консоли строку с пробелами и нажимаете Enter Улыбающийся
Записан
ivanmara
Гость
« Ответ #73 : Сентябрь 07, 2015, 15:33 »

Лучше перефразируйте вопрос.

А так: вводите в консоли строку с пробелами и нажимаете Enter Улыбающийся

Можно пример ?
Записан
Авварон
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 3260


Просмотр профиля
« Ответ #74 : Сентябрь 07, 2015, 16:29 »

Легко
Цитировать
привет, мир!

Записан
Страниц: 1 ... 3 4 [5] 6   Вверх
  Печать  
 
Перейти в:  


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