cresta Можно писать исходный код сразу в кодировке DOS Ещё консоль NT поддерживает юникод. Правда, я не в курсе, как его разруливать. Сам хотел бы узнать.
Наверное тогда лучше писать в обычной кодировке, а перед заключительной компиляцией пустить через Ворд. А то исходник совершенно нечитабельный, как в CodeBlocks, так и в SourceInsight. А выбора кодировки в редакторе кода нет. А может Ворд как ИДЕ использовать )))) Машина то мощнейшая!!! Какое ИДЕ получится! Написать ему макросы для компиляции и линковки, а ? )))))
В Visual Studio можно выбирать кодировку исходника (File > Advanced Save Options > Cyrillic - DOS). Насчет Юникода в консоли: это делается с помощью WriteConsoleW, но толку все равно мало, так как в Win XP SP2 работают только русский и английский алфавиты. Я попробовал пару символов из Latin-1 (Зап. Европа) и Latin Extended-A (Вост.Европа) - вместо них выводятся соответствующие латинские буквы без диакритических знаков. Об иероглифах и говорить нечего - превращаются в знаки вопроса. Смена шрифта консоли с растрового на векторный не помогает. Видимо, других вариантов нет. Но если у кого-нибудь есть работающий пример с символами из нескольких блоков Unicode (чтобы сразу и Latin-1, и кириллица, и китайский) в консоли, откликнитесь, пожалуйста! Special note to cresta: файл test.cpp во вложении записан в кодировке UTF-8; если твои замысловатые редакторы кода его не берут, попробуй посмотреть файл в Word, 2003-я версия открывает без проблем . 197961554__UnicodeConsoleTest.rar
Если нужно перекодировать исходники в 866 перед компиляцией, то добавь вызов программки tconv в Custom Build Steps. Публикую ее здесь, так как сайт автора сдох. Если не нравится, что старая и досовская, напиши свою, это займет всего пару часов. _2124644774__tconv.rar
SDragon По любому надо преобразовывать: хоть в юникод, хоть в дос. А с утилиткой хорошая мысль - сделать её в нормальном варианте, с переключением кодировок и предпросмотром
cresta > "По любому надо преобразовывать: хоть в юникод" А разве нельзя в исходнике задавать строки сразу в юникоде ? (ты про asm или HLL ?) Вообще-то весьма странно, что SetConsoleOutputCP не работает. В msdn вроде никаких примечаний нет, кроме того что можно использовать только доступные кодировки
leo код на срр. Тут дело такое: в исходнике валом строк, а если их объявлять юникодом, то как я понимаю, их надо все описывать отдельно типа wchar mystrin123[] = "абв"; а в самом исходнике писать printf(mystring123);. Не очень наглядно. В то время как неюникодные строки можно сразу по месту лепить: printf( conv_dos("абв")); Читабельность выше
cresta Понятно, ну так и лепи по месту Тебя что - быстродействие преобразования в OEM смущает или просто сомнения из области "как-то некрасиво" ) Кстати попробовал я в win 98 батник запустить для установки mode con codepage в 1251 - дык получил ругань в ответ, мол неверный номер кодовой страницы ?! Интересно в XP тоже такая петрушка или нет, надо бы попробовать..
В смысле как по месту? printf ( MultiByteToWideChar("blabla")); Или как? Если писать "строка", то как обозначить, что она юникод? #define UNICODE или что-то подобное? Так SDragon заметил о проблемах с юникодом.
WriteConsoleW(hStdout, L"unicode хайа", wcslen(L"unicode хайа"), &write, NULL); А что до сих пор молчал, как партизан на допросе? ))
Код (Text): #define UNICODE #include <windows.h> ... printf(TEXT("blabla")) TEXT разворачивается в юниководую строку L"blabla", если #define UNICODE включен, и "blabla", если не включен. В <tchar.h> есть аналогичный макрос _T (удобнее, чем TEXT, так как на два символа меньше набирать). Заметь, что Unicode в консоли работает только в Win NT, так что рано радоваться: в Win 9x это работать не будет. IceStudent, спасибо за ссылку, хотя автор приходит к тому же неутешительному выводу, что и я: Видимо, не дано нам увидеть в консоли русские буквы вперемешку с французскими, ни с помощью #define UNICODE, ни с SetConsoleOutputCP(65001).
В C++ можно создать свой класс типа oem_string запихать в него функцию CharToOem(), научить cout выводить его на консоль. В общем, объектно-ориентированный подход. Производительность не измениться, т.к. вывод на консоль все равно будет медленнее.