我想在Linux中开发一个应用程序。我想使用wstring beacuse我的应用程序应该支持unicode,我不想使用UTF-8字符串。
在Windows操作系统中,使用wstring很简单。因为任何ANSI API都具有unicode形式。例如,有两个CreateProcess API,第一个API是CreateProcessA,第二个API是CreateProcessW。
wstring app = L"C:\\test.exe";
CreateProcess
(
app.c_str(), // EASY!
....
);
但似乎在Linux中使用wstring很复杂!例如,Linux中有一个名为parport_open的API(仅作为示例)。
我不知道如何将我的wstring发送到这个API(或像parport_open那样接受字符串参数的API)。
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*
....
);
我的问题是如何在Linux API中使用wstring?
注意:我不想使用UTF-8字符串。
由于
答案 0 :(得分:3)
几乎每个发行版上的Linux API(在最近的内核上并且具有正确的语言环境设置)默认使用UTF-8字符串 1 。您也应该在代码中使用它们。抵抗是徒劳的。
仅当Unicode限制为65536个字符(即wchar_t
用于UCS-2)时,Windows上的wstring
(以及wchar_t
)才是方便的,现在16-位Windows wchar_t
用于UTF-16,1 wchar_t
= 1 Unicode字符的优势很快就消失了,因此使用UTF-8具有相同的缺点。如今恕我直言,Linux方法是最正确的。 (Another answer of mine on UTF-16 and why Windows and Java use it)
顺便说一句,string
和wstring
都不支持编码,因此您无法可靠地使用这两者中的任何一个来操作Unicode代码点。我听说wxWidgets工具包中的wxString
很好地处理了UTF-8,但我从未对它进行过广泛的研究。
答案 1 :(得分:0)
我不想使用UTF-8字符串。
嗯,至少在调用API时,你需要克服这种不情愿。 Linux使用单字节字符串编码,总是UTF-8。显然,您应该使用单字节字符串类型,因为您显然无法将宽字符传递给期望char*
的函数。使用string
而不是wstring
。