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

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

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

Здесь нужно купить рекламу за 20 тыс руб в месяц! ) пишите сюда - alarforum@yandex.ru
Без учёта ботов - 20000 человек в день, 350000 в месяц.

Ответ
 
Опции темы
Старый 06.07.2019, 16:02   #1
bonta
Новичок
Джуниор
 
Регистрация: 06.07.2019
Сообщений: 2
По умолчанию 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
Сообщений: 15,095
По умолчанию

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

Цитата:
Сообщение от 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 вне форума   Ответить с цитированием
Ответ
Опции темы


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Символ каны в названии файла, латиница и киррилица внутри как сделать 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