gpt4 book ai didi

c++ - 如何在 Linux API 中使用 wstring(s)?

转载 作者:IT王子 更新时间:2023-10-29 00:32:01 27 4
gpt4 key购买 nike

我想在 Linux 中开发一个应用程序。我想使用 wstring 因为我的应用程序应该支持 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(s)?

注意:我不想使用 UTF-8 字符串。

谢谢

最佳答案

默认情况下,几乎每个发行版上的 Linux API(在最新内核和正确的区域设置下)都使用 UTF-8 字符串1。您也应该在代码中使用它们。抵抗是徒劳的。

只有当 Unicode 被限制为 65536 个字符时,Windows 上的 wchar_t(以及 wstring)才方便(即 wchar_t 用于 UCS -2), 现在 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 )

顺便说一句,stringwstring 都不是编码感知的,因此您不能可靠地使用这两者中的任何一个来操纵 Unicode 代码点。我听说 wxWidgets 工具包中的 wxString 可以很好地处理 UTF-8,但我从未对它进行过广泛的研究。


  1. 实际上,正如下面所指出的,内核的目标是与编码无关,即它将字符串视为(以 NUL 结尾?)字节的不透明序列(这就是为什么编码使用“更大”的字符类型,如 UTF- 16 不能使用)。另一方面,无论何时进行实际的字符串操作,都会使用当前的区域设置,并且在几乎所有现代 Linux 发行版上默认设置为 UTF-8(这对我来说是一个合理的默认设置)。

关于c++ - 如何在 Linux API 中使用 wstring(s)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7299760/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com