アプリケーションのすべての std::string が Boost.Locale で Unicode をサポートするようにすることはできますか? ドキュメントを読んだ後、私はそう言うことができます。しかし、私はそれがどのように機能するのか理解していません。主な質問は、ブースト文字列アルゴリズム ライブラリまたは Boost.Lexical_Cast ライブラリを引き続き使用できるかということです。はいの場合、boost::locale::to_upperおよび同様の形式のメソッドが必要な理由は、これらのメソッドがブースト文字列アルゴリズム ライブラリにある場合です。
1 に答える
はい、Boost.Locale でエンコードされたアプリケーション内のすべての文字列を Unicode にすることができます。
機能させるには、文字列にロケールを吹き込むか、デフォルトのグローバル ロケールを新しい Unicode ベースのロケール (Boost.Locale によって生成) に設定します。その方法については、http : //www.boost.org/libs/locale/doc/html/locale_gen.html およびhttp://www.boost.org/libs/locale/doc/html/faq を参照してください。 html
Boost.Locale の文字列操作 API は、Boost 文字列アルゴリズム ライブラリで提供されるものとは異なります。Boost.Locale 関数が優れている理由については、こちらを参照してください: http://www.boost.org/libs/locale/doc/html/conversions.html
グローバル ロケールを正しく設定すれば、boost::lexical_cast を引き続き使用できます (私の記憶が正しければ、ロケール オブジェクトを明示的に Boost.LexicalCast に渡すことはできません)。
ただし、これは場合によっては「壊れる」ことに注意してください。たとえば、整数を文字列に変換するときに、C ロケールを使用する代わりに (おそらく以前のデフォルトであったように)、区切り文字を挿入する可能性のある別のロケールを使用します。ユーザーに表示されない変換を行う場合、 std::stringstream などを直接使用して、これらの不要な書式設定の変更を回避したい場合があります。
Boost.Localeのドキュメントをすべて読むことを強くお勧めします。これにより、ほとんどの懸念 (特に FAQ、生成バックエンド情報など) に対処できるはずです。