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

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

Страниц: 1 2 [3] 4 5 6   Вниз
  Печать  
Автор Тема: Вывод русских символов в консоль  (Прочитано 62705 раз)
Bepec
Гость
« Ответ #30 : Сентябрь 19, 2014, 11:30 »

Использовать только английский Улыбающийся
Записан
8Observer8
Гость
« Ответ #31 : Сентябрь 19, 2014, 11:40 »

Нужно использовать кодек той кодировки, в которой выполнен исходный код программы.
Можно чуть подробнее? Вот это сочетание непонятно: "кодек кодировки исходного кода программы". Как узнать какой у меня?

Использовать только английский Улыбающийся
В моём случае не подходит, так как я планирую работать с русскими заказчиками. Пока язык не позволяет.
Записан
Old
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 4350



Просмотр профиля
« Ответ #32 : Сентябрь 19, 2014, 11:44 »

Как узнать какой у меня?
Хороший вопрос. Улыбающийся
В вендовом GUI используется CP1251, в вендовой консоле CP866, креатор использует по дефолту UTF-8.
Как проверить... загрузите исходник и креатор и меняйте кодировки, если русский текст читается - значит оно. Улыбающийся
Записан
8Observer8
Гость
« Ответ #33 : Сентябрь 19, 2014, 11:52 »

загрузите исходник и креатор и меняйте кодировки, если русский текст читается - значит оно.
Я нашёл, где менять: "Edit" -> "Select Encoding" У меня там UTF-8 Русский отображается нормально. На что поменять?
Записан
Old
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 4350



Просмотр профиля
« Ответ #34 : Сентябрь 19, 2014, 12:02 »

Я нашёл, где менять: "Edit" -> "Select Encoding" У меня там UTF-8 Русский отображается нормально. На что поменять?

Не надо ни на что менять. Используйте вместо tr -> trUtf8, а для вывода в консоль свой дефайн STR.
Записан
OKTA
Гость
« Ответ #35 : Сентябрь 19, 2014, 12:09 »

Используй английский, а потом переводи лингвистом.
Записан
8Observer8
Гость
« Ответ #36 : Сентябрь 19, 2014, 13:40 »

Используй английский, а потом переводи лингвистом.
Сейчас выход нашёл такой: не пишу консольных приложений. Свои проекты ( которые "для души") пишу параллельно на английском и русском, то есть создаю два прокта в двух папках: "RussianVersion" и "EnglishVersion". Проблема с русским языком таким образом решается, но неудобно править два проекта параллельно.

Используйте вместо tr -> trUtf8, а для вывода в консоль свой дефайн STR.
У меня почему-то и версия c tr перестала работать Грустный



Код
C++ (Qt)
#include <iostream>
#include <QTextCodec>
#include <QObject>
 
#define STR(s) ((QTextCodec::codecForLocale()->fromUnicode(s)).constData())
 
int main()
{
   std::cout << STR( QObject::tr( "Привет, Мир!" ) );
}
 
Записан
OKTA
Гость
« Ответ #37 : Сентябрь 19, 2014, 13:56 »

 Шокированный прости что ты делаешь?? две версии пишешь??? ты извращенец

насчет лингвиста для консоли ошибся, извиняюсь Строит глазки

Тогда чувствую самый человеческий вариант - это использовать лингвиста и для вывода в консоль принудительно назначать консольный кодек.
« Последнее редактирование: Сентябрь 19, 2014, 14:09 от OKTA » Записан
Old
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 4350



Просмотр профиля
« Ответ #38 : Сентябрь 19, 2014, 14:06 »

Так вы проверьте какой кодек возвращает codecForLocale? Думаю это не cp866.
Используйте для консоли именноэтот кодек.
Записан
vizir.vs
Гость
« Ответ #39 : Сентябрь 19, 2014, 15:15 »

у разных linux возможны разные кодировки консоли, у винды своя кодировка консоли. Тут надо проверять какая система и выставлять соответствующую кодировку. Я делал так, на этапе компиляции проверялось что за система, и делались соответствующие выводы. По хорошему при запуске программы, она должна определить какая кодировка у консоли и выводить в ней.
« Последнее редактирование: Сентябрь 19, 2014, 15:20 от vizir.vs » Записан
Old
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 4350



Просмотр профиля
« Ответ #40 : Сентябрь 19, 2014, 15:23 »

В венде codecForLocale скорее всего возвращает кодек CP1251, вместо необходимой CP866.
Записан
Bepec
Гость
« Ответ #41 : Сентябрь 19, 2014, 15:38 »

Ага Веселый
Записан
vizir.vs
Гость
« Ответ #42 : Сентябрь 19, 2014, 15:51 »

В венде codecForLocale скорее всего возвращает кодек CP1251, вместо необходимой CP866.
Локаль и кодировка консоли немного разные вещи. Вообще, текущую кодировку в винде можно глянуть командой chcp. Как это сделать из под Qt хз, я этим вопросом не занимался. Теоретически, кодировка консоли может быть изменена. + возможны варианты когда установлена такая кодировка, которая не поддерживает русский язык.

Update:
в доках написано:

QTextCodec * QTextCodec::codecForLocale () [static]

Returns a pointer to the codec most suitable for this locale.
On Windows, the codec will be based on a system locale. On Unix systems, starting with Qt 4.2, the codec will be using the iconv library. Note that in both cases the codec's name will be "System".

т.е. Qt видит что русская локаль и выставляет кодек CP1251.
« Последнее редактирование: Сентябрь 19, 2014, 15:58 от vizir.vs » Записан
OKTA
Гость
« Ответ #43 : Сентябрь 19, 2014, 15:56 »

ахахаха
UINT WINAPI GetConsoleCP(void);
BOOL WINAPI SetConsoleCP(_In_  UINT wCodePageID);
Записан
vizir.vs
Гость
« Ответ #44 : Сентябрь 19, 2014, 16:05 »

ахахаха
UINT WINAPI GetConsoleCP(void);
BOOL WINAPI SetConsoleCP(_In_  UINT wCodePageID);

Только надо еще знать таблицу соответствия числа и кодировки (http://msdn.microsoft.com/ru-ru/library/windows/desktop/dd317756(v=vs.85).aspx).
Записан
Страниц: 1 2 [3] 4 5 6   Вверх
  Печать  
 
Перейти в:  


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