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

时间:2013-08-28 07:35:00

标签: c++ linux string filepath

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

3 个答案:

答案 0 :(得分:6)

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

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

几乎没有提供UTF-8字符串处理的现成库示例:

  • ICU(健壮但非常沉重)。
  • Glib::ustring(隐式转换为UTF-8,GPL)。
  • UTF8-CPP(非常轻量级,仅限标题)。

答案 1 :(得分:1)

Linux不对文件名强制执行编码。但是使用UTF-8很常见。

答案 2 :(得分:0)

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

wchar_t mystring[50] = L"sometext";

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