2

Linux 对其文件 API 使用什么编码?我应该如何在 C++ 中使用路径字符串,使用什么类?我的意思是非 ASCII 字符的路径。在 Windows 上,我使用 UTF-16 std::wstring,在 Mac 上 - UTF-8 和我自己的 UTF-8 字符串类。但不幸的是,我的课程在 Linux 上不可用,那么我应该使用什么?

4

3 回答 3

7

在内部,Linux 允许对文件名使用任何字节序列,但空字节 0 和正斜杠'/'(用作目录分隔符)除外。

在 Linux 上允许 Unicode 文件名的通用约定是对UTF-8文件名使用编码。实现这一目标的最简单方法是使用 good old std::stringstd::wstringWindows 上不建议这样做),但是,您可能需要编写自己的类来验证它确实是 valid UTF-8

UTF-8提供字符串处理的现成库的例子很少:

  • ICU(坚固但非常重)。
  • Glib::ustring(隐式转换为std::string, GPL)。
  • UTF8-CPP(非常轻量级,仅标头)。
于 2013-08-28T07:54:26.497 回答
1

Linux 不强制对文件名进行编码。不过,使用 UTF-8 很常见。

于 2013-08-28T07:53:20.577 回答
0

您仍然可以使用标准类型 wchar_t(当使用 wchar_t 时,%ls 用于 printf/scanf)。此类型允许您使用非 ascii 字符。

wchar_t mystring[50] = L"sometext";

注意:要将普通 char 字符串转换为 wchar_t,您必须使用前缀“L”,您必须记住这与 char 类型不同,因此使用起来有点有趣:o

于 2013-08-28T07:52:57.867 回答