うまくいけば、質問のタイトルが私の問題を十分に説明しています。
プラットフォーム: OSX 10.8、llvm と clang++ コンパイラ
ファイル名が日本語またはキリル文字のディレクトリがあります。これらのファイル名はls
、en_EN.UTF-8 ロケールと Monaco 10 フォントを使用する iTerm2 で (たとえば 経由で) 正しく表示されます (ロケール/フォントが違いを生むかどうかはわかりませんが、違いがあるようです)。ただし、UTF-8 をサポートしていないバニラの xterm は、スクランブルされたシンボルまたは「?」を出力します。非 ASCII 文字の文字。
実際の質問は次のとおりです。
C++ プログラムでは、readdir()
fromを使用しdirent.h
て、日本語またはキリル文字のファイル名を含むディレクトリの内容を一覧表示します。結果のd_name
プロパティを出力すると、Xcode ターミナルに正しい文字が表示されます。つまり、たとえば日本の漢字は実際にそのように表示されます。iTerm2 からプログラムを実行する場合も同様です。繰り返しますが、UFT-8 以外の xterm では文字がスクランブルされています。struct dirent
readdir()
日本語のファイル名のバイト サイズは表示される文字数と等しくないため、
dirent.h
関数は UTF-8 文字列で動作すると思います。すべての OSX C-Library がそのように動作する可能性はありますか?したがって、たとえば、
struct dirent.d_name
またはstrcpy
それを変更し、その変更された文字列を使用して新しいファイルを作成しても安全ですか? 「?????」につながる何らかのトラップに足を踏み入れることは可能ですか? 漢字の代わりにファイル名が書かれていますか?"C" などの別のロケールを設定すると、問題が発生します (を使用する場合はそうではないようです
setlocale(LC_ALL,"C")
)。
注: 私は、dirent.h に代わるサード パーティの可能性には興味がありません。このプログラムは、OSX がロケールと文字エンコーディングをどのように処理するかを明らかにするためだけに作成しました。