Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  

Название темы: ANSI<->ASCII
Показать сообщение отдельно

Аватара для hasherfrog

Старый параноик


Сообщения: 2423
Благодарности: 85

Профиль | Отправить 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, кодировка ДОСа:
Код: Выделить весь код
chcp 1251
@echo йцукен
chcp 866
@echo йцукен
Результат выполнения:
Код: Выделить весь код
C:\Documents and Settings\hasherfrog>1.bat

C:\Documents and Settings\hasherfrog>chcp 1251
╥хъє∙р  ъюфютр  ёЄЁрэшЎр: 1251
йцукен

C:\Documents and Settings\hasherfrog>chcp 866
Текущая кодовая страница: 866
йцукен

Последний раз редактировалось hasherfrog, 14-01-2008 в 12:01. Причина: Добавил примеры "почему"

Это сообщение посчитали полезным следующие участники:

Отправлено: 13:56, 11-01-2008 | #2

Название темы: ANSI<->ASCII