在Linux上使用文件路径字符串,使用什么编码

Working with file path strings on Linux, what encoding to use?

本文关键字:什么 编码 字符串 文件 Linux 路径      更新时间:2023-10-16

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

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

Linux上允许Unicode文件名的常见约定是对文件名使用UTF-8编码。实现这一点的最简单方法是使用好的旧std::string(而不是Windows上建议的std::wstring),但是,您可能需要编写自己的类,以验证它确实是有效的UTF-8

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

  • ICU(坚固但非常重)
  • Glib::ustring(具有到std::string、GPL的隐式强制转换)
  • UTF8-CPP(非常轻,仅限收割台)

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

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

wchar_t mystring[50] = L"sometext";

注意:要将普通的char字符串转换为wchar_t,你必须使用预修复"L",你必须记住这与char类型不同,所以使用它有点有趣:o