Russian Qt Forum
Апреля 24, 2025, 14:15 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

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

Страниц: 1 2 [3] 4 5 6   Вниз
  Печать  
Автор Тема: Вывод русских символов в консоль  (Прочитано 64395 раз)
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.033 секунд. Запросов: 20.