Форум программистов
 
Контакты: о проблемах с регистрацией, почтой и по другим вопросам пишите сюда - alarforum@yandex.ru, проверяйте папку спам! Обязательно пройдите активизацию e-mail.

Вернуться   Форум программистов > Низкоуровневое программирование > Win Api
Регистрация

Восстановить пароль
Повторная активизация e-mail


Донат для форума - использовать для поднятия настроения себе и модераторам

А ещё здесь можно купить рекламу за 15 тыс руб в месяц! ) пишите сюда - alarforum@yandex.ru

Ответ
 
Опции темы
Старый 06.07.2019, 16:02   #1
bonta
Новичок
 
Регистрация: 06.07.2019
Сообщений: 2
Репутация: 10
По умолчанию Windows, C++, Киррилица и именованные каналы

Всем привет. Решил портировать кое-какой код под Виндовс.

Код делает дочерний процесс и соединяется с ним через два пайпа для IPC. Т.е. чтобы родитель мог писать в ребенка и ребенок чтобы мог писать в родителя.

В Линукс в этом плане все хорошо и работает через анонимные пайпы.

В Виндовс пришлось использовать именнованные, для Overlapped. Благо что именнованные так же как и анонимные могут прицепляться к STARTUPINFO.

В общем проблема одно - кодировки. Т.е .если я в порождённый процесс кидаю исключительно латинские буквы он их нормально принимает, и отвечает ими же (для теста возвращает тоже что и получил).

А вот киррилица обрывает ввод/вывод. Если запускать каждое приложение по отдельности то они нормально работают как с латиницей так и с киррилицей.

Такое впечателение что через каналы кириллические символы передаются в какой-то не правильной кодировке и происходит ошибка на потоках ввода-вывода.

Я пробовал всякие манипуляции с setlocale и c std::locale::global(std::locale("ru _RU.UTF-8")); - результов не давало, хотя стоит сказать что в некоторых случаях от ребенка вообще ничего не приходило (похоже поток входил в сотояние ошибки и не работал) а в некоторых случаях приходил текст в виде "кракозябр" - т.е. не в правильной кодировке.

Сейчас не буду пробовать закопипастить все варианты которые я пробовал через setlocale - но в итоге не один не заработал.

Может кто сталкивался с подобной проблемой. Удивительно но такое впечатление что через пайпы никто кириллицу в винде не гоняет, а все солюшены в инете исключительно про чисто ввод и вывод в Консоль - где конечно же у меня и без этих солюшенов все работает. А вот с пайпами засада.
bonta вне форума   Ответить с цитированием
Старый 06.07.2019, 17:38   #2
p51x
Профессионал
 
Регистрация: 15.02.2010
Сообщений: 14,509
Репутация: 2631
По умолчанию

Скорее всего вы при обработке строк, например при чтении/записи, не учитываете, что приходит юникод. Кидаете их анси функциям, которые воспринимают единичный нулевой байт как конец строки.
__________________
Запомните раз и навсегда: помочь != "решите за меня"!
p51x вне форума   Ответить с цитированием
Старый 07.07.2019, 18:26   #3
bonta
Новичок
 
Регистрация: 06.07.2019
Сообщений: 2
Репутация: 10
По умолчанию

Цитата:
Сообщение от p51x Посмотреть сообщение
Скорее всего вы при обработке строк, например при чтении/записи, не учитываете, что приходит юникод. Кидаете их анси функциям, которые воспринимают единичный нулевой байт как конец строки.
Ну да что-то я не так с кодировкой работал. Если честно я не совсем понял в чем была проблема, но пофиксал.


раньше были такие строчки по подготовки локальи для винверсии
setlocale(LC_ALL, ".866");
_wsetlocale(LC_ALL, L".866");

а после того как добавил еще такие
auto myLocale = std::locale("rus_rus.866");
std::wcout.imbue(myLocale);
std::wcin.imbue(myLocale);

то все заработало.

Но правда я совершенно не понимаю как оно работает)

Чуть позже попробую сформулировать непонятные моменты и спросить про них

Последний раз редактировалось bonta; 07.07.2019 в 18:32.
bonta вне форума   Ответить с цитированием
Ответ

Опции темы

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Символ каны в названии файла, латиница и киррилица внутри как сделать HellMercenariess Общие вопросы Delphi 0 19.02.2017 08:13
как создавать именованные индексаторы для класса OmegaBerkut C# (си шарп) 85 15.09.2016 23:15
Динамические именованные диапазоны DiemonStar Microsoft Office Excel 4 25.12.2012 13:33
Именованные таблицы DiemonStar Microsoft Office Excel 4 02.10.2012 18:02
Именованные ячейки Foxx Microsoft Office Excel 1 20.02.2012 00:33


05:03.


Powered by vBulletin® Version 3.8.11
Copyright ©2000 - 2019, Jelsoft Enterprises Ltd.

Проекты отопления, пеллетные котлы, бойлеры, радиаторы
интернет магазин respective.ru