1

更新: 奇妙なことに、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 で動作させる方法を知っている人はいますか?

4

2 に答える 2