Linux 对其文件 API 使用什么编码?我应该如何在 C++ 中使用路径字符串,使用什么类?我的意思是非 ASCII 字符的路径。在 Windows 上,我使用 UTF-16 std::wstring
,在 Mac 上 - UTF-8 和我自己的 UTF-8 字符串类。但不幸的是,我的课程在 Linux 上不可用,那么我应该使用什么?
问问题
2421 次
3 回答
7
在内部,Linux 允许对文件名使用任何字节序列,但空字节 0 和正斜杠'/'
(用作目录分隔符)除外。
在 Linux 上允许 Unicode 文件名的通用约定是对UTF-8
文件名使用编码。实现这一目标的最简单方法是使用 good old std::string
(std::wstring
Windows 上不建议这样做),但是,您可能需要编写自己的类来验证它确实是 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 回答