В дальнейшем будет отправка на сервер...
Под "считать" я понимаю ввод прямо в консоль, а не из файла и т.п.
Из консоли получаешь простую строку, преобразуешь ее с помощью multibytetowidechar, получаешь utf8, делаешь с ним дальше что хочешь, в том числе и на сервер можешь отправлять.
Беда с этим Виндовсом... У меня в Лине вроде сразу utf8 )
преобразуешь ее с помощью multibytetowidechar
Скорее всё же WideCharToMultibyte. И консоль нужна юникодная.
Crazy Hamster
Как ее сделать юникодовской? Читать через wcin?
Crazy Hamster
> И консоль нужна юникодная.
А разве такая есть?
Crazy Hamster
> Скорее всё же WideCharToMultibyte
Нет-нет, именно multibytetowidechar. Надо же из ansii-строки получить utf8. multibytetowidechar и это умеет тоже, там флажок специальный есть для такой операции.
Zab
MultiByteToWideChar(CP_ACP, ....
но оно сконвертирует в utf16 а потом видимо надо обратно в мультибайт только UTF8
можете скинуть пример кода? Запутали меня :)
В винде ReadConsoleW даст UTF-16 строку, из него переводить в UTF-8 либо через WideCharToMultiByte, либо самому или другими библиотеками.
На других платформах уже везде UTF-8 сразу, хотя наверное может зависеть от установленной локали.
Можно попробовать
SetConsoleCP(65001); // UTF-8 SetConsoleOutputCP( 65001); // UTF-8
Но я не гарантирую позитивных результатов.
У меня пока что получаются негативные.
(см. http://www.gamedev.ru/code/forum/?id=205901&page=2#m18 и далее).
Microsoft (чтобы жисть малиной не казалась) так и не сделала нормальной поддержки UTF-8 локали. Так что надежно (например, чтобы пайпы работали) - скорее всего, никак.
vladislav
> Microsoft (чтобы жисть малиной не казалась) так и не сделала нормальной
> поддержки UTF-8 локали. Так что надежно (например, чтобы пайпы работали) -
> скорее всего, никак.
Можно работать с M$ через UTF-16, а преобразовывать в UTF-8 WideCharToMultiByte умеет. Всё надёжно, хоть и не так удобно, как в линуксах, где UTF-8 из коробки.
gammaker
а как мне dir | <my_application> сделать, в юникоде (я с виндой давно не работал)?
gammaker
> Можно работать с M$ через UTF-16, а преобразовывать в UTF-8 WideCharToMultiByte
> умеет. Всё надёжно, хоть и не так удобно, как в линуксах, где UTF-8 из коробки.
Можно увидеть пример кода?
Laynos
> Можно увидеть пример кода?
Я конвертирую UTF-8 и UTF-16 сам, так что примера MultiByteToWideChar\WideCharToMultibyte у меня нету, а писать лень. Но тут же всё очевидно.
При работе с WinAPI вызываешь функции, которые оканчиваются на W. Например ReadConsoleW. Полученную строку преобразуешь в свой любимый UTF-8 с помощью WideCharToMultiByte с кодировкой CP_UTF8. Описание функции загугли, оно есть например на MSDN.
Ну наоборот аналогично преобразуешь строку из UTF-8 в UTF-16 с помощью MultiByteToWideChar с codepage CP_UTF8 и скармливаешь то, что получилось в функции, оканчивающиеся на W.
Про WinAPI-функции, оканчивающиеся на A вообще забудь и никогда их не вызывай.
Ещё вроде как можно даже конвертировать строку без WinAPI через mbstowcs/wcstombs. Но я не пробовал. Можешь тоже посмотреть их описание и использовать.
vladislav
> а как мне dir | <my_application> сделать, в юникоде (я с виндой давно не
> работал)?
А я вообще почти с консолью винды не работал. Даже не знаю, что символ | означает. Он перенаправляет вывод программы на консоль или как аргумент командной строки? В любом случае, если в обеих программах используются варианты функций, оканчивающихся на W, но всё происходит в Юникоде, который всегда можно преобразовать в UTF-8 и обратно, если нужно.
Тема в архиве.