问题标签 [xlocale]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
2 回答
632 浏览

c++ - xlocale 在 OS X 上坏了?

我有一个简单的程序,它使用在命令行上传递给它的一系列语言环境来测试 wchar_t 和 char 之间的转换。它通过打印出语言环境名称和转换失败的字符串来输出失败的转换列表。

我正在使用 clang 和 libc++ 构建它。我的理解是 libc++ 的命名语言环境支持由 OS X 上的 xlocale 库提供。

我看到了一些意想不到的失败,以及一些转换应该失败但没有失败的实例。

这是程序。

以下是一些正确输出的示例

这是一个不期望的输出示例

欧元字符确实存在于 ISO 8859-15 字符集中,因此这不应该失败。

以下是我期望但未收到的输出示例

这是 ISO 8859-1 中存在的货币符号,但在 ISO 8859-15 中已被删除并替换为欧元符号。此转换不应成功,但不会发出错误信号。当进一步检查这个案例时,我发现在这两种情况下,“¤”都被转换为 0xA4,这是“¤”的 ISO 8859-1 表示。

我没有直接使用 xlocale,只是通过 libc++ 间接使用。Mac OS X 上的 xlocale 是否被错误的语言环境定义破坏了?有没有办法解决它?还是我看到的问题是其他原因造成的?

0 投票
2 回答
1287 浏览

c++ - 在 OS X 上设置语言环境崩溃

以下代码在 Linux 上运行良好,但在 OS X 10.7 上引发异常:

OS X 上的输出是:

locale::facet::_S_create_c_locale名称无效

但是,该标准明确指出

有效字符串参数值的集合是"C"""和任何实现定义的值。

因此,导致上述行为的任何原因都违反了标准。

使用的编译器是clang++ 3.1(tags/Apple/clang-318.0.58);我还尝试使用通过 Homebrew 安装的 GCC 4.7,结果相同。

其他人可以验证这个问题吗?是什么原因造成的?我做错什么了吗?这是 OS X 中的错误吗?

(也许这与另一个xlocale问题有关,但错误实际上完全不同。)

0 投票
0 回答
361 浏览

c - 使用 xlocale API 的软件的可移植性如何?它在主要平台(Linux、Windows、iOS、Android、OS X)上可用吗?

根据: https ://developer.apple.com/library/mac/documentation/Darwin/Reference/ManPages/man3/xlocale.3.html

xlocale.h 通过允许在 C 中设置每个线程的语言环境来提供扩展的语言环境支持。

此外,除了 wchar.h 还提供了将 unicode 转换为其他编码的灵活函数,例如 wprintf_l 它输出转换为指定语言环境的 unicode 字符(不是由 setlocale 全局设置的那个)。

它肯定存在于 OS X 和最近的 FreeBSD(>9.1) 平台上,但在任何其他平台上都没有得到官方支持。