更新:奇怪的是,setlocale() 只在 iOS 模拟器上失败,所以我修改了问题标题。它在实际设备上运行良好。
我正在使用 iOS 6 下的本机 (C/C++) 代码,我需要格式化任意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 接受)?