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

标签 c++ linux wstring

我想在 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/

相关文章:

c++ - 需要用户输入字符串/检查字符串长度(C++)

c++ - 在 Xcode 4 中构建用于 Objective-c 应用程序的静态 C++ 库

c++ - 跨平台 Windows/OS X 开发,具有大量现有代码库

具有较小学习曲线的 C++ 图形 API - linux

linux - 如何将文本/纯文本转换为文本/x.shellscript

c++ - 检查 std::wstring 是 null 还是空

c++ - 如何使用 Lighttpd 配置和运行 fastcgi 应用程序

linux - 删除外部硬盘上的所有分区和分区表

c++ - 调用 "SetDllDirectory"时表达式: string iterators incompatiable,

c++ - 在二进制文件中读取和写入字符串c++