問題タブ [boost-locale]

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 投票する
3 に答える
2039 参照

c++ - iOS 用の iconv を使用して Boost.Locale をビルドする

現在、iOS 用の Boost.Locale をビルドしようとしていますが、iconv lib を見つけることができません (threadまたはiOS 用の Boost の他の部分を正常にビルドしていますfilesystem)。

Boost.Build にそれ自体を見つけさせようとしましICONV_PATHた。iPhoneOS SDK iconv lib を指すように変数を設定しようとしました。Boost.Locale で Jamfile を確認したところ、次のルールに遭遇しました。

このディレクトリにはiconv libとヘッダーを含むフォルダーが含まれているため、に設定-sICONV_PATHする/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS8.4.sdk/usrだけで十分だと思いましたが、Boostはまだそれを見つけられず、吐き出します:libinclude

b2私は常にオプションを使用して呼び出すため--reconfigure、以前の呼び出しのキャッシュの結果ではないことに注意してください((cached)上記のリストに末尾があります.

では、iOS SDK に存在する iconv 実装で Boost を正しく指す方法はありますか? 可能であれば、別の iconv を作成することは避けたいと思います。

0 投票する
1 に答える
1166 参照

c++ - boost::locale で stod が正しく動作しない

コンマが小数点記号であるドイツのロケールで、boost::locale と std::stod を一緒に使用しようとしています。次のコードを検討してください。

std::locale loc("") は正しいロケールを作成し、出力は

私が期待するように。行(1)をコメントアウトし、行(2)のコメントを外すと、出力は次のようになります

d2 の結果は予想どおりです。私が理解している限り、boost::locale では、d2 を数値としてフォーマットし、実行する必要があることを明示的に指定する必要があります。

出力を 2,2 に再度固定します。問題は、std::stod が 1,1 を有効な浮動小数点数と見なさず、1 に切り捨てることです。

私の質問は、boost::locale でロケールを生成すると std::stod が機能しなくなるのはなぜですか?

追加情報: VC++2015、Boost 1.60、ICU なし、Windows 10 を使用しています

アップデート:

最初に std::locale("") を使用し、次に boost を使用して、グローバル ロケールを 2 回設定すると、問題が修正されることに気付きました。

しかし、なぜこのように振る舞うかはわかりません!

0 投票する
2 に答える
1573 参照

c++ - boost::locale::conv の関数のユーザーのコードページ名を取得する

当面の課題

Windows で UTF-8 エンコードされた XML からファイル名を解析しています。そのファイル名を変更できない関数に渡す必要があります。内部的には_fsopen()、Unicode 文字列をサポートしないものを使用します。

現在のアプローチ

私の現在のアプローチは、ファイル名がそのエンコーディングで表現可能であることを期待して、ファイル名をユーザーの文字セットに変換することです。次にboost::locale::conv::from_utf()、UTF-8 から変換するために使用boost::locale::util::get_system_locale()し、現在のロケールの名前を取得するために使用しています。

人生は素晴らしい?

コードページWindows-1252を使用しているドイツのシステムを使用しているため、 de_DE.windows-1252get_system_locale()正しく生成されます。ウムラウトを含むファイル名でアプローチをテストすると、すべてが期待どおりに機能します。

問題

システム ロケールを、コード ページWindows-1251を使用するウクライナ語に切り替えたことを確認するためです。ファイル名にキリル文字を使用すると、私のアプローチは失敗します。その理由は、get_system_locale()現在は正しくないde_DE.windows-1252が生成されるためです。

一方GetACP()、ドイツ語ロケールでは 1252、ウクライナ語ロケールでは 1251 が正しく生成されます。また、この小さなテスト プログラムが期待どおりに動作するため、Boost.Locale が特定のロケールに変換できることも知っています。

質問

  • Boost.Locale がサポートする形式でユーザー ロケールの名前を照会するにはどうすればよいですか? 使用するとGerman_Germany.1252std::locale("").name()が生成され、使用すると例外が発生します。boost::locale::conv::invalid_charset_error

  • システム ロケールがde_DE.windows-1252 のままである可​​能性はありますが、ローカル管理者として変更していると思われますか? 同様に、私のアカウントの言語は英語ですが、システム言語はドイツ語です。(ログイン画面はログインするまでドイツ語です)

  • 短いファイル名を使用する必要がありますか? ただし、確実に機能していないようです。

細字

  • コンパイラはMSVC18
  • Boost はバージョン 1.56.0、バックエンドはおそらく winapi
  • システムは Win7、システム言語はドイツ語、ユーザー言語は英語
0 投票する
0 に答える
136 参照

c++ - Boost で UnicodeString を使用する

ICUでライブラリがデフォルトとして使用されていることを読みbackendましたboost::locale。もしそうならUnicodeString、ブーストでICUのタイプを使用できますか?誰かが例を教えてください..

編集:これは私が最後に試したことです..ここでは、wstring に保存する代わりに、UnicodeString が必要です。

0 投票する
1 に答える
277 参照

c++ - Boost.ProgramOptions で gettext のような翻訳を使用する

std::stringオプションの説明として引数を提供しようとしています。一般に、有効範囲が定義されていない引数。詳しくは、翻訳を提供したいです。

add_options()上記の構文を使用できるようにoptions_description_easy_init、演算子を事前定義したインスタンスを返します。()現在、そのオペレーターはconst char*説明としてのみ受け入れており、これは私を悩ませています。したがって、私は次の質問を念頭に置いています。

  1. この問題にアプローチする方法は何でしょうか?
  2. このクラスの所有権ポリシーは何ですか? これらのポインタは保存されているだけなので、ソースは、説明が生きている限り存続する必要がありますか、それとも安全です(うん!):

    /li>
  3. const char_type*説明パラメータとしてのみ持つ理由は何ですか?

0 投票する
1 に答える
862 参照

android - アンドロイド用boost::localeのビルド方法

Androidで動作するブースト1.64のプロジェクトがあります。ここで、 / libsboost::localeに依存するライブラリを有効にする必要があります。https://github.com/pelya/libiconv-libicu-androidをダウンロードし、正常にコンパイルしました。次に、リストを追加しますICUICONV

私のcmakeファイルに。残念ながら、ブーストログにはまだ次のように表示されます。

Boost C++ ライブラリの構築。

公式ドキュメントから、boost::localeICU ライブラリは共有ライブラリのように見えますが、libiconv-libicu-android は静的ライブラリのみを提供します。それは問題ですか?

誰かが助けてくれることを願っています、事前に感謝します。