標準 C ライブラリでの Unicode ファイル処理
C 標準ライブラリを使用してファイルを開くタスクは、Windows アプリケーションと Unicode では特に困難になる可能性がありますファイル名。この文脈では、Unicode は多くの場合 UTF-8 を指します。
C 標準ライブラリには、固有の Unicode サポートがありません。 char と wchar_t は本質的に Unicode エンコードではありません。 Windows では、wchar_t は UTF-16 を表しますが、標準ライブラリには UTF-8 ファイル名の明示的なサポートがありません (Windows では char は非 Unicode です)。
Microsoft STL は、const wchar_t を受け入れるファイル ストリームのコンストラクターを提供します。 * filename。次のようにファイル作成が可能です:
wchar_t const name[] = L"filename.txt"; std::fstream file(name);
ただし、このオーバーロードは C 11 に準拠していません。 (文字ベースのバージョンのみを保証します)。また、4.8.x 以降、MinGW(-w64) 用の GCC の libstdc などの代替 STL 実装にも存在しません。
プラットフォームの違いがエンコードの解釈に影響することに注意してください。 Windows の char は UTF-8 ではなく、他のオペレーティング システムでは wchar_t は UTF-16 ではない可能性があります。したがって、携帯性が問題となります。 wchar_t ファイル名からストリームを開くことは標準では定義されておらず、char でファイル名を指定すると、OS に依存するエンコーディングの違いにより問題が発生する可能性があります。
以上が標準 C で Unicode ファイル名を確実に処理するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。