Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
||
ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
[3.142.197.212] |
|
Страницы: (2) 1 [2] все ( Перейти к последнему сообщению ) |
Сообщ.
#16
,
|
|
|
прописал, в итоге компиллер ругаться стал на этот вызов SetConsoleTitleA:
Цитата IntelliSense: argument of type "const TCHAR *" is incompatible with parameter of type "LPCSTR" какие типы страшные: TCHAR, LPCSTR) Добавлено все, понял, не заметил, что ты исправил на char* но это не помогло все равно... в заголовке печатается совсем мало знаков и какие-то кракозябры Добавлено кодировка у проекта стоит 866, если что |
Сообщ.
#17
,
|
|
|
Цитата FasterHarder @ Я не знаю, что такое "кодировка проекта", я знаю, что такое "кодировка файла исходного текста".кодировка у проекта стоит 866, если что Тогда лучше у виндузятников спросить. Я лично проверил: для ANSI-приложения — кодировка файла 866, всё пучком, кодировка 1251 — титл нечитаемый; для UNICODE-приложения — кодировка файла 866, титл нечитаемый, но по-другому, кодировка 1251 — всё пучком. |
Сообщ.
#18
,
|
|
|
Цитата FasterHarder @ но это не помогло все равно... в заголовке печатается совсем мало знаков и какие-то кракозябры Попробуй так: static const WCHAR* title = L"Это заголовок консольного окна вывода русскими буквами"; SetConsoleTitleW(title); --- И вообще ты всё это зря затеял. Надо было оставить проект обычным - со стандартной кодировкой исходника. Таблицу рисовать может и не очень наглядно в исходнике, но это же константы: // ╔ - \xc9 // ═ - \xcd // ╦ - \xcb // ╗ - \xbb printf("\xc9\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcb\xcd\xcd\xbb\n"); --- Но самое удобное, очевидно, это взять твою строку из 1-го сообщения в формате UTF-16: printf(" ╔═════╦════════════════════╦════════════════════╗\n"); и использовать её так: static const WCHAR* pStr = L"╔═════╦════════════════════╦════════════════════╗"; // преобразуем WCHAR -> OEM const char* p = Wchar2Oem(pStr); printf("%s\n",p); И тогда всё получится удобно. Надо только сделать конвертер. |
Сообщ.
#19
,
|
|
|
Цитата ЫукпШ @ Попробуй так: , опять кракозябры, но уже ДРУГИЕ кракозябры, не те, которые были до этого) тут с этой кодировкой еще такие траблы возникают иногда, что открываешь проект, а кодировка исходника текста в кракозябрах, где были русс.буквы (комментарии) и псевдографика также при считывании файлов с диска *.txt с русским содержимым, тоже не все чисто а еще иногда при работе с *.csv-файлами, тоже проблемы с кодировкой надо будет как-нибудь сесть и основательно разобраться с этой кодировкой и сделать шпаргалку себе, какую куда преобразовывать, что задает кодировку, операционнка или Visual studio и пр. пр. моменты |
Сообщ.
#20
,
|
|
|
Цитата FasterHarder @ Цитата ЫукпШ @ Попробуй так: , опять кракозябры, но уже ДРУГИЕ кракозябры, не те, которые были до этого) Это означает, что кодировка твоего исходника - не CP1251. Что плохо, поскольку этот вариант порождает массу проблем. При этом актуальность наличия разнообразных перекодировщиков текстовых строк только возрастает. --- Что означает строка: static const WCHAR* title = L"Это заголовок консольного окна вывода русскими буквами"; ?? буквально следующее: "Дорогой друг компилятор ! У меня есть строчка "Это заголовок консольного окна вывода русскими буквами" в кодировке CP1251. Я поставил вначале L. Вот так: L"Это заголовок консольного окна вывода русскими буквами". Это значит, что я хочу, чтобы эта строчка в сегменте констант исполнимой программы была в кодировке UTF-16. Я передам её функции SetConsoleTitleW и увижу правильные буквы в заголовке. " А если кодировка исходной строки другая, (а компилятор об этом ведь не знает) то все его преобразования бессмысленны. Заставить программу работать можно. Но для этого должно быть дополнительное преобразование текста. Если исходник в формате OEM, тогда: static const char* title = "Это заголовок консольного окна вывода русскими буквами"; const char* p = Oem2Wcar(title); SetConsoleTitleW(p); Но это просто не удобно. И к тому же лишает возможности использовать это: L"Это заголовок консольного окна вывода русскими буквами"; Возможны и более сложные варианты. Например, исходник - в кодировке ОЕМ, а в настройках проекта стоит "USE UNICODE..." Тогда компилятор начнёт по-умолчанию конверсию CP1251 -> UTF16 всех текстовых строк. А они - в кодировке ОЕМ.. получатся сплошные неприятности. --- Предложение менять кодировку исходника для изменения поведения программы - крайне не удачная идея. |