菜鸟教程小白 发表于 2022-12-13 04:35:42

C++ std::locale ("en") 在 iOS 上抛出异常


                                            <p><p>在 iOS 上,当我尝试从有效标识符构造 C++ 语言环境时,我的程序崩溃:</p>

<blockquote>
<p>Terminating app due to uncaught exception &#39;collate_byname::collate_byname failed to construct for en&#39;, reason: &#39;collate_byname::collate_byname failed to construct for en&#39;</p>
</blockquote>

<p>在这一行:</p>

<pre><code>std::locale loc(&#34;en&#34;);
</code></pre>

<p>这在其他平台上运行良好。这是平台上存在的有效语言环境标识符(我尝试使用来自 CFLocale 的标识符)。</p>

<p>我的程序需要一个 C++ <code>std::locale</code> 以便格式化日期和数字等。</p>

<p>也许我需要在构建中包含其他库?</p>

<p>我使用的是最新的 XCode 9.4.1 及其包含的 libc++,它在 iOS 11.4.1 上运行。其他 C++ 功能在那里运行良好。</p>

<p>不幸的是,没有办法用可移植 C++ 列出可用的语言环境,尽管我尝试过的所有语言都在 NSLocale.availableLocaleIdentifiers 中列出</p></p>
                                    <br><hr><h1><strong>Best Answer-推荐答案</ strong></h1><br>
                                            <p><p>经过一番研究,我了解到 C 语言环境不包含在 iOS 版本中。没有。</p>

<p>我的解决方案(因为我想用 C++ 格式化价格、时间和日期),它在我的应用程序中提供语言环境定义。在第一次启动时解压缩它们,并将 PATH_LOCALE 环境变量设置为新创建的目录。 (PATH_LOCALE 是 C 库用于定位语言环境定义的 BS​​D 环境变量,而不是像 GNU/Linux 上的 LOCPATH)</p>

<p>PATH_LOCALE 是语言环境文件的基本路径,每个语言环境都在一个子目录中,例如:</p>

<p>fr/LC_TIME
FR/..
zh/LC...</p>

<p>所以我需要子目录,iOS bundle 不支持子目录。</p>

<p>当你这样做时</p>

<p>setlocale(LC_CTYPE,"en_US.UTF-8");</p>

<p>C 库在 PATH_LOCALE 中查找名为“en_US.UTF-8”的目录。</p>

<pre><code>NSString* documentsPath = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);

    NSString* localeDir = ;
    BOOL fileExists = [ fileExistsAtPath:localeDir];

    if (!fileExists) {
      NSString *filepath = [ pathForResource:@&#34;locale&#34; ofType:@&#34;zip&#34;];
      ZipArchive *zipArchive = [ init];
      ;
      ;
      ;
    }
    setenv(&#34;PATH_LOCALE&#34;, [ cString], 1);
</code></pre>

<p>这使用您必须包含在项目中的 Ziparchive。</p>

<p> <a href="https://code.google.com/archive/p/ziparchive/" rel="noreferrer noopener nofollow">https://code.google.com/archive/p/ziparchive/</a> </p></p>
                                   
                                                <p style="font-size: 20px;">关于C&#43;&#43; std::locale (&#34;en&#34;) 在 iOS 上抛出异常,我们在Stack Overflow上找到一个类似的问题:
                                                        <a href="https://stackoverflow.com/questions/51949128/" rel="noreferrer noopener nofollow" style="color: red;">
                                                                https://stackoverflow.com/questions/51949128/
                                                        </a>
                                                </p>
                                       
页: [1]
查看完整版本: C&#43;&#43; std::locale (&#34;en&#34;) 在 iOS 上抛出异常