Windows XP, DOS и консольные приложения

Mongolor

Новичок
Windows XP, DOS и консольные приложения

Всем известно, что Windows XP (мой SP1) имеет одну хорошую особенность - по умолчанию работает в консоли с досовской кодировкой (866). У меня есть консольное приложение, написанное под Windows и работает с кодировкой CP-1251. Оно получает на вход некие данные, как латиницей так и кириллицей.
Делаю вызов так:
echo мой конь очень слаб | exe.exe
И получаю в ответ руны. Ибо прога возвращает результат в кодировке CP-1251, а консоль работает в режиме 866.

Хорошо, делаю chcp 1251 и консоль начинает работать в режиме кодировки CP-1251.
Но при вводе русских букв получается что-то типа: ьющ ъюэ№ юўхэ№ ёырс. Ну да хрен с ним.
echo ьющ ъюэ№ юўхэ№ ёырс | exe.exe выводит результат такими же каракулями, но верно обработанный той прогой.

Далее поменял в свойствах командной строки шрифт с точечного на Lucida Console. Каракули заменились на кириллические символы. Всё шикарно!

Но дело в другом, обработать нужно мильён записей. Поэтому был написан PHP скрипт, который циклом делает exec('echo $data[$i] | exe.exe)', $p);. Соотвественно выводится чушь. Предварительно кодирую строку (CP-1251) в DOS -> WIN (так посоветовал Штирлиц) с помощью самопальной функции и всё работает шикарно. Но есть один косяк, при таком (двойном) кодировании вместо буквы "ю" получается буква "о".

Хорошо, стал конвертировать встроенной функцией. convert_cyr_string($text, 'd', 'w') тоже работает, но опять вместо "ю" выводится " ".

А теперь вопросы:
#1 Что за фигня?
#2 Так у всех или мой Windows подвёл меня?
#3 Как бы решить проблему с буквой "ю"?
 

HraKK

Мудак
Команда форума
Тебя точно подвело чутье в какой форум надо постить.
 

slach

Новичок
ты сам себя запутал

исходники у тебя исходники консольной апликухи есть?
ну отладь их
разберись в какой кодировке им доходят данные

ну и вместо convert_cyr_string
заюзай iconv
 
Сверху