問題タブ [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.
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はまだそれを見つけられず、吐き出します:lib
include
b2
私は常にオプションを使用して呼び出すため--reconfigure
、以前の呼び出しのキャッシュの結果ではないことに注意してください((cached)
上記のリストに末尾があります.
では、iOS SDK に存在する iconv 実装で Boost を正しく指す方法はありますか? 可能であれば、別の iconv を作成することは避けたいと思います。
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 回設定すると、問題が修正されることに気付きました。
しかし、なぜこのように振る舞うかはわかりません!
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-1252がget_system_locale()
正しく生成されます。ウムラウトを含むファイル名でアプローチをテストすると、すべてが期待どおりに機能します。
問題
システム ロケールを、コード ページWindows-1251を使用するウクライナ語に切り替えたことを確認するためです。ファイル名にキリル文字を使用すると、私のアプローチは失敗します。その理由は、get_system_locale()
現在は正しくないde_DE.windows-1252が生成されるためです。
一方GetACP()
、ドイツ語ロケールでは 1252、ウクライナ語ロケールでは 1251 が正しく生成されます。また、この小さなテスト プログラムが期待どおりに動作するため、Boost.Locale が特定のロケールに変換できることも知っています。
質問
Boost.Locale がサポートする形式でユーザー ロケールの名前を照会するにはどうすればよいですか? 使用するとGerman_Germany.1252
std::locale("").name()
が生成され、使用すると例外が発生します。boost::locale::conv::invalid_charset_error
システム ロケールがde_DE.windows-1252 のままである可能性はありますが、ローカル管理者として変更していると思われますか? 同様に、私のアカウントの言語は英語ですが、システム言語はドイツ語です。(ログイン画面はログインするまでドイツ語です)
短いファイル名を使用する必要がありますか? ただし、確実に機能していないようです。
細字
- コンパイラはMSVC18
- Boost はバージョン 1.56.0、バックエンドはおそらく winapi
- システムは Win7、システム言語はドイツ語、ユーザー言語は英語
c++ - Boost で UnicodeString を使用する
ICU
でライブラリがデフォルトとして使用されていることを読みbackend
ましたboost::locale
。もしそうならUnicodeString
、ブーストでICUのタイプを使用できますか?誰かが例を教えてください..
編集:これは私が最後に試したことです..ここでは、wstring に保存する代わりに、UnicodeString が必要です。
c++ - Boost.ProgramOptions で gettext のような翻訳を使用する
std::string
オプションの説明として引数を提供しようとしています。一般に、有効範囲が定義されていない引数。詳しくは、翻訳を提供したいです。
add_options()
上記の構文を使用できるようにoptions_description_easy_init
、演算子を事前定義したインスタンスを返します。()
現在、そのオペレーターはconst char*
説明としてのみ受け入れており、これは私を悩ませています。したがって、私は次の質問を念頭に置いています。
- この問題にアプローチする方法は何でしょうか?
このクラスの所有権ポリシーは何ですか? これらのポインタは保存されているだけなので、ソースは、説明が生きている限り存続する必要がありますか、それとも安全です(うん!):
/li>const char_type*
説明パラメータとしてのみ持つ理由は何ですか?
android - アンドロイド用boost::localeのビルド方法
Androidで動作するブースト1.64のプロジェクトがあります。ここで、 / libsboost::locale
に依存するライブラリを有効にする必要があります。https://github.com/pelya/libiconv-libicu-androidをダウンロードし、正常にコンパイルしました。次に、リストを追加しますICU
ICONV
私のcmakeファイルに。残念ながら、ブーストログにはまだ次のように表示されます。
Boost C++ ライブラリの構築。
公式ドキュメントから、boost::locale
ICU ライブラリは共有ライブラリのように見えますが、libiconv-libicu-android は静的ライブラリのみを提供します。それは問題ですか?
誰かが助けてくれることを願っています、事前に感謝します。