2

Linux はファイル API にどのエンコーディングを使用しますか? C++ でパス文字列を操作するには、どのクラスを使用すればよいですか? 非ASCII文字を含むパスを意味します。Windows では UTF-16 を使用しstd::wstring、Mac では UTF-8 と独自の UTF-8 文字列クラスを使用します。残念ながら、私のクラスは Linux では利用できません。何を使用すればよいですか?

4

3 に答える 3

7

内部的には、Linux はファイル名に任意のバイト シーケンスを使用することを許可しています'/'

Linux で Unicode ファイル名を許可する一般的な規則は、UTF-8ファイル名にエンコードを使用することです。これを実現する最も簡単な方法は、古き良きものを使用することですstd::string( std::wstringWindows では推奨されていません) が、実際に有効であることを検証する独自のクラスを作成する必要がある場合がありますUTF-8

UTF-8文字列の処理を提供する、すぐに使用できるライブラリの例がいくつかあります。

  • ICU (頑丈だが非常に重い)。
  • Glib::ustring (GPL への暗黙のキャストがありますstd::string)。
  • UTF8-CPP (非常に軽量、ヘッダーのみ)。
于 2013-08-28T07:54:26.497 に答える
1

Linux は、ファイル名にエンコーディングを強制しません。ただし、UTF-8 を使用するのが一般的です。

于 2013-08-28T07:53:20.577 に答える
0

標準型の wchar_t (および wchar_t を使用する場合は printf/scanf の %ls) を引き続き使用できます。このタイプでは、ASCII 以外の文字を使用できます。

wchar_t mystring[50] = L"sometext";

注: 通常の char 文字列を wchar_t にするには、プレフィックス "L" を使用する必要があります。これは char 型と同じではないことを覚えておく必要があるため、使用するのは少しおかしいです :o

于 2013-08-28T07:52:57.867 に答える