_wfopenに相当するMac OS X
質問
を探しているのと同等のWindows _wfopen()
Mac OS Xで動作します。ずっと面白いアイデアないか?
このため、ポートWindowsの図書館を使う wchar*
そのファイルのインタフェース。ことなどに対応できるようになってクロスプラットフォーム図書館ができないなどのようにクライアントアプリケーションのファイルパスでの図書館があります。
解決
POSIX API Mac OS Xで利用できるUTF-8文字列です。するための変換wchar_t文字列はUTF-8の利用が可能で、CoreFoundationの枠組みからMac OS Xで動作します。
ここではクラストップは、UTF-8で生成された文字列からのwchar_t文字列になります。
class Utf8
{
public:
Utf8(const wchar_t* wsz): m_utf8(NULL)
{
// OS X uses 32-bit wchar
const int bytes = wcslen(wsz) * sizeof(wchar_t);
// comp_bLittleEndian is in the lib I use in order to detect PowerPC/Intel
CFStringEncoding encoding = comp_bLittleEndian ? kCFStringEncodingUTF32LE
: kCFStringEncodingUTF32BE;
CFStringRef str = CFStringCreateWithBytesNoCopy(NULL,
(const UInt8*)wsz, bytes,
encoding, false,
kCFAllocatorNull
);
const int bytesUtf8 = CFStringGetMaximumSizeOfFileSystemRepresentation(str);
m_utf8 = new char[bytesUtf8];
CFStringGetFileSystemRepresentation(str, m_utf8, bytesUtf8);
CFRelease(str);
}
~Utf8()
{
if( m_utf8 )
{
delete[] m_utf8;
}
}
public:
operator const char*() const { return m_utf8; }
private:
char* m_utf8;
};
使用量:
const wchar_t wsz = L"Here is some Unicode content: éà€œæ";
const Utf8 utf8 = wsz;
FILE* file = fopen(utf8, "r");
この読み取りまたは書き込みます。
他のヒント
あなただけ開きたいファイルを取り扱う道を含めることができるUnicodeの文字。通り過ぎの道 ファイルシステムの表現 へ fopen
.
場合に経路からの株式のMac OS Xの枠組み(例えば、オープンパネルか炭素またはココア)となる必要な変換ができるようにな使いいたします。
がん発生のパスを自分でできるようにする必要があります、CFStringRefからのパスを取得するファイルシステムの表現に渡POSIX Apiのように
open
またはfopen
.
一般的にはない多くのエンベロープに従います。例えば、多くのアプリケーションが補助データファイルに格納され、ユーザのアプリケーションサポートディレクトリがどの名前のファイルをASCII、ご利用の標準Mac OS X Apiユーザーのパスワードを変更するのアプリケーションサポートディレクトリにする必要がなくなり、より快適なるバンチの被害妄想に変換パスの構築とそのふたつです。
編集追加: い"といった注意 対 任意に変換するすべてUTF-8を使うように wcstombs
でファイルシステムのエンコーディングが必ずしも一致しませんの発生するUTF-8です。Mac OS XとWindowsの両方の特別のものと異なる正準分解のルールのエンコード用ファイルシステムのパス。
例えば、それらを決める必要があるかどうか"é"格納する予定であるワコード単位(いずれか LATIN SMALL LETTER E WITH ACUTE
または LATIN SMALL LETTER E
次いで COMBINING ACUTE ACCENT
).これら二つの異なる、異なる長さをバイト配列は、Mac OS X、Windows作は避けて複数のファイルと同じ名前のユーザーを認識し、同じディレクトリです。
のルールを実行する方法をこの標準分解できるん毛ので、どちらかというとよいプロジェクトを実施する自分自身でその機能のシステムの枠組みにおいて提供さんには重いものを持ち上げる.
@JKP:
ないすべての機能MacOS Xを受けUTF-8、ファイル名とfilepathsがUTF8、そのすべてのPOSIX機能対応ファイルへのアクセス(open、fopen,stat等) 受け入れUTF8.
見 こちらの.引用:
どのようにファイル名のAPIレベルの のAPIとなります。現在の炭素 Apiで扱うファイル名の配列として UTF-16文字POSIXも対応 その配列としてUTF-8 なぜUTF-8にした。どのよう この保存ディスクの ディスクフォーマットHFS+を使UTF-16、 ることのない重要なことが多いです。
その他のPOSIX機能を取り扱UTF8です。E.g.機能を扱うユーザー名、グループ名やユーザーのパスワードを使用UTF8の情報(ユーザー名で日本およびパスワードできる中国、問題)。
な取り扱UTF8.E.g.すべての文字列の機能を、UTF8文字列は、通常のC文字列、文字以上126して特に意味はありません。な理解の概念は複数のバイト数(char C)の形成は単一のUnicode文字です。どのようにApiを取り扱char*にポインタを渡されてからAPIをAPIに含まれています。しかし、原則として、親指と言ってもいいでしょう:
のいずれかの機能のみを受け付けたCの文字列純ASCII文字のみの範囲が0-126)または受諾すUTF8.通常の機能を許可しない文字以上126と解釈して他のエンコーディングによUTF8.このホテルの食事が最高でした。場合、文書化し、その者がそのようなエンコードを文字列になります。
使用している場合は、ココアでは比較的容易とNSString.だけで負荷をUTF16データの利用-initWithBytes:長さ:エンコード:(恐らく-initWithCString:エンコード:)しUTF8バージョンの呼びUTF8Stringの結果です。そして、を押してくださfopenし、あなたの新しいUTF8文字列としてはparam.
お気に入りの商品がきっと話fopenをUTF-8文字列言語に関係なく、-できないのC++にOSXでいます。
していま読み込むファイル名から構成UTF8ファイルを通して wifstream (使用す wchar_t バッファ).
Macの実装とは異なLinuxとWindowsの場合です。wifstreamを読み取り、そのバイトからのファイルを別のwchar_t細胞のバッファです。しておりますので3つの空のバイトが open が必要で char 文字列になります。このようにプログラマが使用できる wcstombs への変換機能の広い文字列にマルチバイト文字列になります。
APIに対応しUTF8.より良い理解の使用メモリー観、六角レンチをエディターとなります。