Сравнение кириллических строк не работает
Внимание! Это довольно старый топик, посты в него не попадут в новые, и их никто не увидит. Пишите пост, если хотите просто дополнить топик, а чтобы задать новый вопрос — начните новый.
Внимание! Это довольно старый топик, посты в него не попадут в новые, и их никто не увидит. Пишите пост, если хотите просто дополнить топик, а чтобы задать новый вопрос — начните новый.
Программа должна проверить на истинность ввод строки. Не могу понять почему проверочное условие в операторе if не выполняется. Помогите пожалуйста :)
Так сработает:
или так:
При консольном вводе символы кириллицы попадают в программу в кодировке cp866, а литерал в программе, как правило, в кодировке windows-1251. Поэтому оно и не совпадает. Надо либо отказаться от кириллицы, либо приводить кириллицу к единой кодировке (в данном случае к windows-1251).
Или поставить линупс)
«Линупс» здесь ни при чём )) Просто кодировки сравниваемых строк должны совпадать. И касается это не только национальных символов, и не только консольного ввода. Я посмотрю, как ты под хвалёным линухом будешь сравнивать строку в EBCDIC (допустим, считанной из файла) со строкой в KOI-8 )))
Кстати, в MS Visual Studio есть элементарная возможность писать консольные программы без танцев с бубном в виде
setlocale()
и всяких тамOemToCharBuffA()
: надо просто сказать редактору IDE, что бы он сохранял файлы в кодировке 866. И всё. Ввод, вывод, сравнение строк с кириллицей — никаких проблем.А если IDE/редактор не поддерживает работу с различными кодировками — значит надо менять IDE/редактор. Или танцевать под ритмичный аккомпанемент бубна.
Суть в том, что
cmd.exe
использует богомерзкую кодировкуcp866
, сохранять файлы в которой, у нормального человека нет никакого желания.Если нужно сравнить две строки в заведомо разных кодировках, то это уже совсем другой разговор. Почти всегда, такие задачи решаются просто, с помощью
iconv
.Вопрос религии. Мне, например, KOI8-R — ну не в пень. А сталкиваться время от времени приходится.
Почему «другой разговор»? В контексте данного топика — тоже есть две строки в заведомо разных кодировках. Другой вопрос, что об этом не все догадываются ))
Если бы в венде везде использовался юникод, этой проблемы бы не возникло вообще.
А то, что сейчас там cp866, так это уже не религия. Секта какая-то :)
При нынешнем положении вещей, самый простой выход — не использовать кириллицу в коде, если пишешь что-то консольное.
Конечно, фигня, мягко выражаясь (( За столько лет M$ уж могли бы, если не отказаться от cp866, учитывая соображения обратной совместимости, то хотя бы допилить консоль так, что бы она понимала различные кодировки, или была бы настраиваемой.
А вот отказаться от кириллицы при написании консольных приложений — выплеснуть ребёнка вместе с водой. Что из этого получается — примеров множество:
Ну, и заодно подучить базовый английский. Транслитом, конечно писать не стоит.
Я пишу и компилирую в IDE MS Visual Studio 2010 Ultimate. Может быть на моем этапе еще рано задумываться о таких вещах, как кодировка символов в файлах и консоли, но проблема есть и некоторые задумки ставит в тупик, although English always has been my favorite lenguadge :).
Череп, подскажи пожалуйста, что нужно сделать в моей IDE, чтобы не было
Собственно вот: Практическое руководство. Управление файлами с помощью кодировки.
Пишешь консольное приложение со строками на русском языке и сохраняешь файл (в IDE) с кодировкой «Кириллица (DOS) — кодовая страница 866». При этом не нужны никакие дополнительные телодвижения ни при выводе кириллицы, ни при вводе, ни при сравнении строк. Все библиотечные функции работают так же, как с чистой латиницей.