更新: 奇妙なことに、setlocale() は iOS シミュレーターでのみ失敗するため、質問のタイトルを修正しました。実際のデバイスでは問題なく動作します。
iOS 6 でネイティブ (C/C++) コードを使用しており、任意wchar_t
の文字列をフォーマットする必要があります。ただし、Latin-1 コードページ外のコードポイントを含む文字列をフォーマットすると、swprintf
失敗します (errno= で値 -1 を返しますEILSEQ
)。
wchar_t buff[256];
swprintf(buff, 256, L"\u00A9 %ls", L"ascii"); // works
swprintf(buff, 256, L"\u03A0 %ls", L"ascii"); // will return -1
ここで関連する質問をした後、ロケールが正しく設定されていないことが問題のようです (解決策が Mac OS X で動作することを確認しました)。しかし、iOS 6 では効果がないようです:
#include <locale.h>
setlocale(LC_CTYPE,"");
こちらの手順に従って、ロケール ファイルをプロジェクトに手動でコピー/追加し、PATH_LOCALE
環境変数を設定しましたが、問題は解決しません。
NSString* resourcePath=[[NSBundle mainBundle] resourcePath];
setenv("PATH_LOCALE", [resourcePath UTF8String], 1);
setlocale(LC_CTYPE,"en_US.UTF-8");
setlocale() を iOS 6 で動作させる方法を知っている人はいますか?