0

struct direntメンバーd_nameはユニコードであるがASCIIではない文字を持つことができますか?テストしたところ、「é」で動作しますが、「é」がASCIIであるためかどうかはわかりません。タイプは何ですかd_namecharそれなら私はフープされますが、それならwchar_t私は救われます。

4

2 に答える 2

1

Open Group Base Specificationにstruct direntは、サイズが指定されていない次のメンバーが含まれている必要があります。

char d_name[];

準拠する実装では、それは型ですchar[]が、それは必ずしもUnicode文字を格納できないことを意味するわけではありません。この仕様では、複数の文字セット(または移植可能な文字セットを超える文字)のサポートは必要ありませんが、それも禁止されていません('é'ちなみに、ASCIIではありません)。

実際には、サポートされる文字セットはロケールによって異なります。C用語では、の文字​​列はd_name「マルチバイト」文字として格納されます。

于 2012-08-17T19:15:50.250 に答える
0

これは、プラットフォームとファイルシステムによって異なります。たとえば、HFS +ファイルシステムはUTF-16を使用してファイル名を内部に格納し、それらをUTF-8として公開するためchar、direntの配列には(ロケールに関係なく)UTF-8文字列が含まれている必要があると思います。

NTFSはファイル名をUTF-16にも保存しますが、公開される内容はプラットフォームによって異なります。Windowsは、システムロケールとUTF-16の間で変換を行います。別のプラットフォームがUTF-16とUTF-8の間で変換する場合があります。別のプラットフォームがUTF-16と直接の環境のロケールの間で変換する場合があります。

他のファイルシステムは、ファイル名をバイト配列として保存および公開するだけなので、direntには最初に保存されたデータがすべて含まれます。これは通常、ロケールエンコーディングの文字列になりますが、保証はありません。

于 2012-08-17T19:51:02.863 に答える