Вывод русских символов в консольных программах

Тема в разделе "WASM.BEGINNERS", создана пользователем _NEBO, 21 окт 2009.

  1. _NEBO

    _NEBO New Member

    Публикаций:
    0
    Регистрация:
    20 фев 2008
    Сообщения:
    27
    Как научить консольные виндовые программы показывать русские символы?
    Например мне нужно читать из консоли cmd ls список файлов в каталоге, но русские символы не выводит.
    зарание спасибо!
     
  2. SII

    SII Воин против дзена

    Публикаций:
    0
    Регистрация:
    31 окт 2007
    Сообщения:
    1.483
    Адрес:
    Подмосковье
    Надо просто выводить их в расчёте на русскую кодовую страницу ДОС (CP-866, если склероз не изменяет), а не как в ГУИ, где используется русская страница Винды (CP-1251).
     
  3. _NEBO

    _NEBO New Member

    Публикаций:
    0
    Регистрация:
    20 фев 2008
    Сообщения:
    27
    выводить то надо.. а как? )))
    не могу ж я поправить код в виндовой программе.
     
  4. Rockphorr

    Rockphorr Well-Known Member

    Публикаций:
    0
    Регистрация:
    9 июн 2004
    Сообщения:
    2.622
    Адрес:
    Russia
    я только не понял какое это имеет отношение к форумы WASM ??
    вообще раньше в windows было
    mode cp prepare ...
    mode cp select ...
    что то аналогичное нужно и в современных виндах прописать где то в свойствах
    у меня на русской xp32sp3 таких проблем нет
     
  5. Rockphorr

    Rockphorr Well-Known Member

    Публикаций:
    0
    Регистрация:
    9 июн 2004
    Сообщения:
    2.622
    Адрес:
    Russia
    _NEBO
    что за винда то у вас
     
  6. ironway

    ironway New Member

    Публикаций:
    0
    Регистрация:
    21 июн 2006
    Сообщения:
    90
    Есть api функции для этих преобразований:
    OemToChar
    CharToOem
     
  7. _NEBO

    _NEBO New Member

    Публикаций:
    0
    Регистрация:
    20 фев 2008
    Сообщения:
    27
    ХР sp3.

    Это я думаю не поможет. Вместо русских символов знаки вопроса
     
  8. r90

    r90 New Member

    Публикаций:
    0
    Регистрация:
    26 ноя 2005
    Сообщения:
    898
    Вывод из программы делается вполпинка:
    Код (Text):
    1. #include <stdio.h>
    2. #include <locale.h>
    3. int main ()
    4. {
    5.     setlocale (LC_ALL, NULL);
    6.     printf ("привет мир\n");
    7.     return 0;
    8. }
    Теоретически, это может помочь и со вводом из дочерних процессов.
     
  9. Rockphorr

    Rockphorr Well-Known Member

    Публикаций:
    0
    Регистрация:
    9 июн 2004
    Сообщения:
    2.622
    Адрес:
    Russia
    _NEBO
    есть подозрение что данные в своих прогах вы получаете в строках юникод
    соответственно и преобразований должно быть 2 - из юникода в анси а потом в оем 866

    впрочем привели бы код
    команда dir русские буквы в именах файлов выводит ????
    dir c:
     
  10. FatMoon

    FatMoon New Member

    Публикаций:
    0
    Регистрация:
    28 ноя 2002
    Сообщения:
    954
    Адрес:
    Russia
    с виндовыми консольными программами есть некая закавыка: например, если ввести telnet /?, то получим бред в другой кодировке - это косяк в программе. В telnet.exe. Как минимум, на XP без СП, СП1 и СП2 точно. Подозреваю, что есть еще несколько программ, с аналогичной проблемой. Но большинство все-таки показывают то, что надо. Имеется в виду именно это? Или как самому печатать в консоль по русски? Или все консольные утилиты вместо русского печатают знаки вопроса?

    Для второго случая (на который подумали в #2, 6, 8 и 9) ответ практически дали. Для последнего - надо смотреть настройки, а также уточнить - версия ОС, язык, выбранная локальная кодировка, и что за файлы не отображаются - из FAT32? С флешки?
     
  11. max7C4

    max7C4 New Member

    Публикаций:
    0
    Регистрация:
    17 мар 2008
    Сообщения:
    1.203
    попробуйте перед запуском telnet выполнить команду chcp 1251. мне помогает.
     
  12. _NEBO

    _NEBO New Member

    Публикаций:
    0
    Регистрация:
    20 фев 2008
    Сообщения:
    27
    нет, не все. например ping - "Превышен интервал ожидания для запроса."

    cmd ls наберите в ХР (в любой RU версии) и если в каталоге файлы на русском то вместо имен будут - "?????"

    NTFS

    не помогает.
     
  13. _NEBO

    _NEBO New Member

    Публикаций:
    0
    Регистрация:
    20 фев 2008
    Сообщения:
    27
    Оо .. выводит!
    хммм.. странно.. можкосяк в именно с - "ls"
     
  14. FatMoon

    FatMoon New Member

    Публикаций:
    0
    Регистрация:
    28 ноя 2002
    Сообщения:
    954
    Адрес:
    Russia
    нет такого в ХР. Это никсовая команда, у тебя что-то установлено нестандартное :)
     
  15. max7C4

    max7C4 New Member

    Публикаций:
    0
    Регистрация:
    17 мар 2008
    Сообщения:
    1.203
    _NEBO
    ls насколько мне известно не принадлежит к batch командам Windows. За то что она выводит и как пускай отдувается ее автор.
     
  16. r90

    r90 New Member

    Публикаций:
    0
    Регистрация:
    26 ноя 2005
    Сообщения:
    898
    Ы, я думал `cmd ls' -- это cmd.exe запущенный с какими-то опциями. :)
    А если ты *nix'овые утилиты пытаешься использовать в вин, то я думаю надо просто выставить LC_* переменные окружения в нужные значения. Правда, вероятно, для начала придётся локаль создать. Точнее ответить не могу, пока вопрос не будет сформулирован чётче. Я честно говоря не очень понимаю в чём проблема. В том, что ls в cmd.exe криво работает? Ну дык выполни команду:
    Код (Text):
    1. export LC_ALL=ru_RU.CP866
    По идее должно заработать. Хотя если в cmd.exe в качестве командного интерпретатора не bash, а родной вендовый, то экспортировать переменную окружения надо как-то иначе. cmd.exe не понимает слова export.
    Хотя я бы, пожалуй, не заморачивался по-поводу настройки софта под убогий cmd.exe. Я б поставил Xming, и cygwin с rxvt. И использовал бы rxvt вместо cmd.exe. Ну или gnome-terminal, или ещё какой-нибудь терминал, какой больше нравится.
     
  17. Noga

    Noga New Member

    Публикаций:
    0
    Регистрация:
    10 окт 2008
    Сообщения:
    92
    Была у меня проблема с выводом информации полученной через WMI на русской винде. Получал unicode, на выводе русских букв - процесс зависал. Выяснил что нормально отрабатывает юникод только WriteConsole. Для записи в файл через потоки использовал imbue с utf8.
     
  18. Rockphorr

    Rockphorr Well-Known Member

    Публикаций:
    0
    Регистрация:
    9 июн 2004
    Сообщения:
    2.622
    Адрес:
    Russia
    _NEBO
    откуда и что за cmd вы запускаете ??? обычный cmd ключ -ls игнорирует
     
  19. Rockphorr

    Rockphorr Well-Known Member

    Публикаций:
    0
    Регистрация:
    9 июн 2004
    Сообщения:
    2.622
    Адрес:
    Russia
    вы как узнаете что там у вас наворочено напишите что за cmd такой что понимает -ls
     
  20. cppasm

    cppasm New Member

    Публикаций:
    0
    Регистрация:
    18 июл 2006
    Сообщения:
    923
    Как уже сказали нет в Win такой команды.
    Это запуск отдельного приложения - ls.exe
    У тебя стоит или CygWin, или MinGW. Скорее всего первый.
    Вот и копай как в нём вывод настроить нормальный.
    Возможно поможет (обычно помогает :) ) добавить в переменные среды переменную LC_ALL=ru_RU.CP866