質問

ある標準的な方法についfopenとunicode文字列ファイルパス?

役に立ちましたか?

解決

には*nixするのは簡単では、標準のfopen(詳しくは情報から返TokeMacGuy、この フォーラム) Windowsで利用でき_wfopen、そのパスは、unicode文字列を生成します(詳細については、 MSDN).

はありませんリアルに共通していただき、包装このマクロは、すべてのその他のシステムに依存する。

他のヒント

いいえ、標準的な方法はありません。オペレーティング・システムの間にいくつかの違いがあります。ここでOSは非ASCIIファイル名をどのように処理するか違うのです。

Linuxの

Linuxでは、ファイル名は、単にバイナリ文字列です。最も近代的なディストリビューション上の規則は、非ASCIIファイル名にUTF-8を使用することです。しかし、初めに、ISO-8559-1などのファイル名をエンコードするのが一般的でした。それは基本的にエンコーディングを選択するために、各アプリケーション次第ですので、あなたも同じファイルシステム上で使用される異なるエンコーディングを持つことができます。 LANG環境変数は、あなたに有利なエンコーディングが何であるかヒントを与えることができます。しかし、これらの日、あなたはおそらくどこでもUTF-8を想定することができます。

無効なUTF-8シーケンスを含むファイル名は、ほとんどのLinuxファイルシステムに完全に有効であるため、

これは、しかし、問題がないわけではありません。あなたが唯一のUTF-8をサポートする場合はどのように、このようなファイル名を指定しますか?理想的には、UTF-8とバイナリファイル名の両方をサポートしている必要があります。

OS X

OS X上のHFSファイルシステムは、Unicode(UTF-16)は、内部ファイル名使用します。 fopenのようなほとんどのC(およびPOSIX)ライブラリ関数UTF-8文字列を受け入れる(彼らは8ビット互換しているので)、内部でそれらを変換します。

Windowsの

のWindows APIは、ファイル名にUTF-16を使用しますが、fopenはASCIIのみをサポートしています。多くのCライブラリ関数は、UTF-16(Windows上wchar_tを)受け入れる非標準的な同等のものを持っています。例えば、 _wfopen の代わりfopen

これはあなたの現在のロケールの問題です。 Unicodeが有効になっている私のシステム上で、ファイルパスは、Unicodeになります。私は、localeコマンドによってこれを検出することができるよ。

$ locale
LANG=en_US.UTF-8
LC_CTYPE="en_US.UTF-8"

ファイル・パスのエンコーディングは、通常、システム全体に設定されているファイル・パスは、システムのロケールではありませんので、もし、あなたはそれを変換する必要があります、おそらく<のhref = "HTTPによる://www.gnu .ORG /ソフトウェア/ libiconvを/」のrel = "nofollowをnoreferrer">のiconv のライブラリ。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top