Я хочу разработать приложение в Linux. Я хочу использовать wstring, потому что мое приложение должно поддерживать Unicode, и я не хочу использовать строки UTF-8.
В ОС Windows использовать wstring очень просто. потому что любой ANSI API имеет форму юникода. например, есть два API CreateProcess, первый API — CreateProcessA, а второй API — CreateProcessW.
wstring app = L"C:\\test.exe";
CreateProcess
(
app.c_str(), // EASY!
....
);
Но кажется, работать с wstring в Linux сложно! например, в Linux есть API под названием parport_open (Это просто пример).
и я не знаю, как отправить мою wstring в этот API (или API, такие как parport_open, которые принимают строковый параметр).
wstring name = L"myname";
parport_open
(
0, // or a valid number. It is not important in this question.
name.c_str(), // Error: because type of this parameter is char* not wchat_t*
....
);
Мой вопрос: как я могу использовать wstring(s) в API Linux?
Примечание. Я не хочу использовать строки UTF-8.
Спасибо
CreateProcess()
нельзя вызывать сwchar_t*
, а только с_tchar*
. Кроме того, широкие символы не имеют непосредственного отношения к Unicode, и, кроме того, широкие символы Windows являются преступлением против человечества. Возможно, эта моя тирада немного объясняет широкие символы и что с ними делать. - person Kerrek SB   schedule 04.09.2011CreateProcess
не существует, это макрос дляCreateProcessW
/CreateProcessA
в зависимости от настроек макроса_UNICODE
. - person Matteo Italia   schedule 04.09.2011wcstombs
и возвращаетstd::string
со следующим использованиемparport_open(0, toutf8(name).c_str(), ....);
? - person user786653   schedule 04.09.2011wchar_t
, если я этого не знаю. Я бы использовал только UTF-8 для взаимодействия со средой, а UTF16 (с явным именем) никогда. (И я бы взаимодействовал с API Windows через wchars без кодирования.) - person Kerrek SB   schedule 04.09.2011