問題タブ [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++ - OS Xでxlocaleが壊れていますか?

コマンドラインで渡された一連のロケールを使用して、wchar_t と char の間の変換をテストする簡単なプログラムがあります。ロケール名と変換に失敗した文字列を出力することで、失敗した変換のリストを出力します。

私はclangとlibc ++を使って構築しています。私の理解では、libc++ の名前付きロケール サポートは、OS X の xlocale ライブラリによって提供されます。

予期しないエラーが発生したり、変換が失敗するはずのインスタンスが発生したりしません。

これがプログラムです。

正しい出力の例をいくつか示します

予期しない出力の例を次に示します。

ユーロ文字は ISO 8859-15 文字セットに存在するため、これが失敗することはありません。

期待しているが受け取っていない出力の例を次に示します

これは、ISO 8859-1 に存在する通貨記号ですが、ISO 8859-15 では削除され、ユーロ記号に置き換えられました。この変換は成功しないはずですが、エラーは通知されていません。このケースをさらに調べると、両方のケースで「¤」が「¤」の ISO 8859-1 表現である 0xA4 に変換されていることがわかります。

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 と並んで、指定されたロケール (setlocale によってグローバルに設定されたものではない) に変換された Unicode 文字を出力する wprintf_l など、Unicode を他のエンコーディングに変換するための柔軟な関数が提供されます。

OS X には確かに存在し、最近では FreeBSD(>9.1) プラットフォームにも存在しますが、他のプラットフォームでは公式にサポートされているようには見えません。