ある標準的な方法についfopenとunicode文字列ファイルパス?
質問
ある標準的な方法についfopenとunicode文字列ファイルパス?
他のヒント
いいえ、標準的な方法はありません。オペレーティング・システムの間にいくつかの違いがあります。ここでOSは非ASCIIファイル名をどのように処理するか違うのです。
Linuxの
Linuxでは、ファイル名は、単にバイナリ文字列です。最も近代的なディストリビューション上の規則は、非ASCIIファイル名にUTF-8を使用することです。しかし、初めに、ISO-8559-1などのファイル名をエンコードするのが一般的でした。それは基本的にエンコーディングを選択するために、各アプリケーション次第ですので、あなたも同じファイルシステム上で使用される異なるエンコーディングを持つことができます。 LANG
環境変数は、あなたに有利なエンコーディングが何であるかヒントを与えることができます。しかし、これらの日、あなたはおそらくどこでもUTF-8を想定することができます。
これは、しかし、問題がないわけではありません。あなたが唯一の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 のライブラリ。