sartiii
Постоялец
- Регистрация
- 17 Сен 2008
- Сообщения
- 105
- Реакции
- 17
- Автор темы
- #1
Всем известно, что 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 Как бы решить проблему с буквой "ю"?
Делаю вызов так:
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 Как бы решить проблему с буквой "ю"?