gpt4 book ai didi

ios - setlocale() 在 iOS 模拟器中不起作用?

转载 作者:太空宇宙 更新时间:2023-11-04 04:50:53 25 4
gpt4 key购买 nike

更新:奇怪的是,setlocale() 只在 iOS 模拟器上失败,所以我修改了问题标题。它在实际设备上运行良好。

我在 iOS 6 下使用 native (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

问了相关问题后here ,问题似乎是语言环境设置不正确(我已经验证该解决方案在 Mac OS X 下有效)。但是在iOS 6下好像没有效果:

#include <locale.h>

setlocale(LC_CTYPE,"");

按照说明操作 here ,我已经手动将语言环境文件复制/添加到我的项目,并设置了 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 接受该应用程序)?

最佳答案

我无法让 stephane 的解决方案起作用。但这两种 super 简单的解决方案都对我有用:

  1. setlocale(LC_CTYPE, "UTF-8")
  2. newlocale(LC_CTYPE_MASK, "UTF-8") 与采用语言环境参数的 foo_l 变体 wchar_t 类相结合。

虽然 iOS 可能不附带全套语言环境(包括 en_US.UTF-8),但它似乎附带基本的无语言 UTF-8 语言环境。但它只适用于 LC_CTYPE;尝试 LC_ALL 会失败。你当然可以测试

char *result = setlocale(LC_TYPE, "UTF-8");
Assert(result && strcmp(result, "UTF-8") == 0);

关于ios - setlocale() 在 iOS 模拟器中不起作用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15555129/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com