|
Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » CMD/BAT - ANSI<->ASCII |
|
CMD/BAT - ANSI<->ASCII
|
Пользователь Сообщения: 58 |
Профиль | Отправить PM | Цитировать
Подскажите, пожалуйста, как можно командной строкой конвертировать текстовой файл из dos кодировки в windows?
|
|
Отправлено: 16:46, 09-01-2008 |
Старый параноик Сообщения: 2423
|
Профиль | Отправить PM | Цитировать UPDATE: решение найдено, см. ниже.
К сожалению, командной строкой я не смог. Никак*. Проблема в том, что даже смена кодовой страницы (командами mode con cp select=XXX или chcp XXX) не может повлиять на результаты команд type или echo**, поскольку они внутри себя явно заточены на использование дефолтной 866-й страницы (и весь вывод пропускают через CharToOem()-функцию). Это можете проверить, можете поверить на слово. Вариантами решения могут быть: 1. Использование сторонних перекодировщиков (я использовал recode), есть масса других консольных утилит. 2. Написание своего перекодировщика (см. тут что-то вроде образца). ___ * В принципе, может кто и сможет это сделать. Но тогда как объяснить вот такое поведение cmd.exe: Microsoft Windows XP [Версия 5.1.2600] (С) Корпорация Майкрософт, 1985-2001. C:\Documents and Settings\hasherfrog>chcp 866 Текущая кодовая страница: 866 C:\Documents and Settings\hasherfrog>echo йцукен > 1.txt C:\Documents and Settings\hasherfrog>chcp 1251 ╥хъє∙р ъюфютр ёЄЁрэшЎр: 1251 C:\Documents and Settings\hasherfrog>type 1.txt йцукен <- ??? должны быть кракозябли C:\Documents and Settings\hasherfrog>for /f %i in (1.txt) do echo %i C:\Documents and Settings\hasherfrog>echo йцукен йцукен <- ??? ** Сначала я ляпнул про echo, но вообще-то она тут не при чём, конечно (ей что дали, то она и вывела). Другое дело, что её использовать тоже не получится. Пример: Файл 1.bat, кодировка ДОСа: Результат выполнения: |
Последний раз редактировалось hasherfrog, 14-01-2008 в 12:01. Причина: Добавил примеры "почему" Отправлено: 13:56, 11-01-2008 | #2 |
Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети. Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля. |
Пользователь Сообщения: 76
|
Профиль | Отправить PM | Цитировать |
Последний раз редактировалось ven00m, 11-01-2008 в 22:34. Причина: ошибко Отправлено: 22:05, 11-01-2008 | #3 |
Старый параноик Сообщения: 2423
|
Профиль | Отправить PM | Цитировать ven00m, не совсем так (/u даст юникод, а не window-кодировку), но идея правильная.
Решение вот такое, текст файла typea.bat @if "%1"=="" goto error @if "%2"=="" goto error @if not exist %2 goto error @if "%1"=="/a" ( @chcp 866 >nul @goto print ) @if "%1"=="/w" ( @chcp 1251 >nul @goto print ) @goto error :print @type %2 >> ___tmptxt @type ___tmptxt @del ___tmptxt @chcp 866 >nul @goto exithere :error @echo Usage: @echo typea /a filename.txt - Print filename.txt as dos-866 @echo typea /w filename.txt - Print filename.txt as win-1251 :exithere |
Последний раз редактировалось hasherfrog, 14-01-2008 в 12:03. Причина: Добавил @ и возврат в локаль dos (чисто для красоты :]) Отправлено: 11:57, 14-01-2008 | #4 |
Пользователь Сообщения: 58
|
Профиль | Отправить PM | Цитировать Спасибо, hasherfrog!
только вот что-то под xp не работает из дос в win кодировку. перенаправил вывод в файл, а он как был, так и остался... |
|
Отправлено: 13:35, 14-01-2008 | #5 |
Старый параноик Сообщения: 2423
|
Профиль | Отправить PM | Цитировать akrav, вот с перенаправлением нужно подумать. Вы обратите внимание на код. Мне кажется, в виде конвейера или перенаправления не получится использовать отдельный (приведённый выше) батник, вместо этого Вам надо его код переделать (встроиться туда, где @type ___tmptxt).
|
Отправлено: 14:50, 15-01-2008 | #6 |
Пользователь Сообщения: 58
|
Профиль | Отправить PM | Цитировать Очень интересно! Однако пока с полезным результатом напряженка. Ни туда, ни обратно конвертации не происходит, что можно пронаблюдать в файле ___tmptxt, который насколько я понял создается перенаправление вывода.
|
Отправлено: 11:22, 16-01-2008 | #7 |
Участник сейчас на форуме | Участник вне форума | Автор темы | Сообщение прикреплено |
| |||||
Название темы | Автор | Информация о форуме | Ответов | Последнее сообщение | |
Разное - Esc-последовательности в BAT-файлах (ansi.sys) | AndreyY89 | Microsoft Windows 2000/XP | 8 | 16-03-2012 07:05 | |
Установка - ANSI code page is not installed... | Saxofon | Microsoft Windows 2000/XP | 6 | 16-03-2009 21:39 | |
[решено] dec2hex|ascii | semiono | AutoIt | 6 | 15-02-2009 11:37 | |
ASCII-последовательности | lunas | Программирование и базы данных | 2 | 09-02-2003 23:54 | |
ASCII-последовательности | lunas | Хочу все знать | 6 | 05-02-2003 14:24 |
|