Название: Русский текст в консольном QT приложении Отправлено: fear от Май 18, 2006, 18:27 Проблема состоит в выводе русского текста в консольном приложении.
Пробовал два варианта: Код: QTextCodec *codec = QTextCodec::codecForName("utf8"); Выводит: ?????? Код: QTextCodec *codec = QTextCodec::codecForName("utf8"); Выводит совсем какую то тарабаршину Название: Русский текст в консольном QT приложении Отправлено: Asaphus_Expansus от Май 18, 2006, 20:11 QTextCodec *codec = QTextCodec::codecForName("utf8");
QTextCodec::setCodecForCStrings(codec); QTextStream out(stdout); out << QString("Привет") <<endl; Название: Русский текст в консольном QT приложении Отправлено: Steven_Orko от Май 18, 2006, 20:46 Если ты в винде, то надо использовать кодек "IBM 866", а не utf8. В Линуксе тот, что в локали выставлен...
Название: Русский текст в консольном QT приложении Отправлено: fear от Май 18, 2006, 23:53 Оба варианта пробовал, результат прежний.
Пишу в Windows. В диалоговом приложении пробовал использовать кодек utf8 - русский отображается. Название: Русский текст в консольном QT приложении Отправлено: DenKor от Май 19, 2006, 07:15 QTextCodec *codec = QTextCodec::codecForName("IBM 866");
QTextStream out(stdout); out.setCodec(codec); out<<"Привет"<<endl; добавлено спустя 2 минуты: Цитата: "DenKor" QTextCodec *codec = QTextCodec::codecForName("IBM 866"); QTextStream out(stdout); out.setCodec(codec); out<<"Привет"<<endl; P.s. И в досовском окне по умолчанию должны быть загружены руские шрифты Название: Русский текст в консольном QT приложении Отправлено: fear от Май 20, 2006, 11:30 Цитата: "DenKor" P.s. И в досовском окне по умолчанию должны быть загружены руские шрифты Программа должна работать без головной боли для пользователя В MFC была функция CharToOem(), в QT, я думаю, должен быть подобный механизм. Код: char result[128]; Выводит: Привет Название: Русский текст в консольном QT приложении Отправлено: Steven_Orko от Май 20, 2006, 13:27 Ща расскажу, почему у тебя не получается. Ты когда пишешь в тексте программы строку по-русски, то она у тебя хранится в кодировке винды, то есть в Windows-1251. Что будет, если ты ее сразу станешь конвертить в IBM 866? Ничего хорошего, так как код символов точно не совпадет. Хочешь универсальности, никогда не пиши в тексте проги сообщения по-русски. Если уж так надо, то выдели отдельный хедер, где все они будут объявлены, как #define. Например, так:
Код:
А дальше уже из UNICODE можешь конверить, куда хошь, так в ту еж IBM 866. Кстати, только в этом случае ты увидишь в консоли русские буквы. Проверял на себе, прям щас, прежде, чем пост отправил ))) Название: Русский текст в консольном QT приложении Отправлено: fear от Май 20, 2006, 16:22 Цитата: "Steven_Orko" Ща расскажу, почему у тебя не получается. Ты когда пишешь в тексте программы строку по-русски, то она у тебя хранится в кодировке винды, то есть в Windows-1251. Что будет, если ты ее сразу станешь конвертить в IBM 866? Ничего хорошего, так как код символов точно не совпадет. Почему тогда дилоговое QT приложение, работает изумительно? В текте программы я как раз по русски пишу. Код: #include <QtGui/QApplication> Название: Русский текст в консольном QT приложении Отправлено: Steven_Orko от Май 20, 2006, 18:55 А потому, что консоль - это одно, а GUI - это другое. Gui-приложение в Винде использует по-умолчанию кодировку Windows-1251, ну, или utf8, без разницы. А вот консоль использует как раз OEM, т.е. IBM 866. Если ты помнишь те времена, когда господствовал MS-DOS 6.22, то наверняка щас вспомнишь, как в конфигурационных файлах autoexec.bat писали что-то связанное с этим словом.
добавлено спустя 3 минуты: Да, кстати, чтобы приложение использовало UNICODE в Винде, надо его скомпилировать с каким-то флагом... Не помню, не делал такого... Название: Русский текст в консольном QT приложении Отправлено: fear от Май 21, 2006, 11:11 Цитата: "Steven_Orko" Ты когда пишешь в тексте программы строку по-русски, то она у тебя хранится в кодировке винды, то есть в Windows-1251. Что будет, если ты ее сразу станешь конвертить в IBM 866? Ничего хорошего, так как код символов точно не совпадет. Почему тогда при конвертации русских строк в консольном приложении функцией CharToOem() (она получается выполняет конвертацию из Windows-1251 в IBM 866) конвертация проходит корректно? Не верится что в QT нет подобной функции. Название: Русский текст в консольном QT приложении Отправлено: Ka3a4oK от Май 21, 2006, 18:38 Попробуй в самом начале функции main написать:
Код: setlocale(LC_CTYPE, "Russian"); Название: Русский текст в консольном QT приложении Отправлено: Steven_Orko от Май 21, 2006, 23:59 Цитата: "fear" Почему тогда при конвертации русских строк в консольном приложении функцией CharToOem() (она получается выполняет конвертацию из Windows-1251 в IBM 866) конвертация проходит корректно? Знаешь что? Ты бы сразу сказал, что с программирование дружишь не долго. Тебе твой вопрос про корректность не кажется глупым? Если нет, то отвечаю: люди знаю, что делают, когда писали эту функцию. Цитата: "fear" Не верится что в QT нет подобной функции. Эт почему ж???? Очень даже верится. Есть механизм, который позволяет переводить строки из одной кодировки в другую. Или по-твоему надо было написать куеву тучу всяких разных функций для перевода из одной кодировки в другую? Ты преставляешь себе их количество и гибкость такого решения? ИМХО, то, что вместо этого сделали тролли, гораздо лучший и более гибкий вариант. Название: Русский текст в консольном QT приложении Отправлено: fear от Май 23, 2006, 23:30 Цитата: "Steven_Orko" Ты когда пишешь в тексте программы строку по-русски, то она у тебя хранится в кодировке винды, то есть в Windows-1251. Возникает вопрос (случай для GUI QT приложения): Если строка, которую пишешь в коде по-русски хранится в Windows-1251, то почему для коректного отображения русского языка приходится устанавливать кодек utf8? Т.е. если я тебя правильно понял, по-умолчанию строки сохраняются в Windows-1251 кодировке, а для их отображения по-умолчанию используется какая то другая кодировка? Вопрос, в чём логика такого подхода? Название: Русский текст в консольном QT приложении Отправлено: Steven_Orko от Май 23, 2006, 23:50 Потому, что, как я понял, Qt для отображения использует UNICODE в GUI.
Название: Re: Русский текст в консольном QT приложении Отправлено: omorozov от Август 15, 2014, 15:17 Попробуй в самом начале функции main написать: Вот это работает, спасибо! Код: setlocale(LC_CTYPE, "Russian"); |