Неправильная кодировка после перенаправления вывода `dir` в файл - PullRequest
6 голосов
/ 28 марта 2012

Я запускаю этот код в Windows cmd.exe в Европе и использую здесь локальные настройки для своего языка.Поэтому я использую диакритические знаки в именах каталогов.

Я пытаюсь перечислить имена каталогов, и они отображаются правильно.Затем я сохраняю их в файл, но когда я открываю его в блокноте, диакритические знаки не читаются: например, вместо Střední Čechy у меня есть Stýednˇ ¬echy.

Что я сделал не так и как я могу это сделатьисправить это?

@echo off
del directories.conf
FOR /F "delims=!" %%R IN ('dir * /b /a:d /o:n') DO (

 IF EXIST "%%R\scenery" ( 
  echo %%R
  echo %%R >> directories.conf
 ) ELSE (ECHO NOT INCLUDED %%R)

)
Echo Directory list created...
pause

Ответы [ 2 ]

12 голосов
/ 28 марта 2012

Попробуйте запустить cmd.exe с ключом / u. Это заставит cmd писать в UTF-16.

Также вам нужно переключиться на кодовую страницу 1250 (ANSI для Центральной Европы), используя chcp 1250.

Вы можете сделать это внутри вашего пакетного скрипта. Я сделал один для тебя. Структура:

.\Jižní Morava
.\Jižní Morava\scenery
.\Pelhřimov
.\Pelhřimov\scenery
.\Nic moc výlet
.\Střední Čechy
.\Střední Čechy\scenery

И сценарий:

@echo off

if _%1_==_main_ (
    call :main
) else (
    cmd /u /c "%0 main"
)
goto :eof

:main
    chcp 1250
    del directories.conf
    for /F "delims=!" %%R in ('dir * /b /a:d /o:n') do (
        if exist %%R\scenery (
            echo %%R
            echo %%R >> directories.conf
        ) else (
            echo not included: %%R
        )
    )
    echo Directory list created...
    pause
goto :eof

Также я рекомендую вам прочитать замечательный ответ Эндрюдота на связанный вопрос.

1 голос
/ 30 мая 2017

В качестве альтернативного решения (если файл уже создан), вы можете просто перекодировать файл.

Блокнот ++ имеет эту функцию:

  • Перейдите к Кодировка> Наборы символов
  • Выберите соответствующий набор символов с изящной визуализацией
  • Вернитесь к Кодировка> Наборы символов
  • Выбрать Конвертировать в UTF-8
  • Сохранить файл
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...