Обновление: как ни странно, setlocale() не работает только в симуляторе iOS, поэтому я изменил заголовок вопроса. Он отлично работает на реальных устройствах.
Я работаю с собственным кодом (C/C++) под iOS 6, и мне нужно отформатировать произвольные строки wchar_t
. Однако при форматировании строк, содержащих кодовые точки вне кодовой страницы Latin-1, swprintf
завершается ошибкой (возвращается значение -1 с errno=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 (при этом приложение все еще принимается Apple Store)?