問題タブ [icu]
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++ - NumberFormat / DecimalFormatは、特定の浮動小数点値をdoubleではなくlongとして扱います
"#.0"
NumberFormat / DecimalFormatは、形式(#は任意の数値)の文字列をdoubleとして解析しないようです。次のコードはこれを示しています。
解析する場合"2.0"
、Formattableのタイプは2(Formattable::Type::kLong
)です。"2.1"
Formattableの型を解析する場合、1()Formattable:Type::kDouble
-両方の文字列の場合と同じです。
floatをUnicodeStringとしてフォーマットしようとした場合にも問題が発生します(たとえば、float2.0
がにフォーマットされ"2"
ます)。
だから:ICUで整数として解釈されることなく、どのように二重数を解析/フォーマットできますか?
android - androidndkでのUnicodeサポート
AndroidNDKプロジェクトの一部として使用する必要のある大きなC/C++ライブラリがあります。このライブラリは、UTF8文字列をインテリジェントに処理できる必要があります(たとえば、小文字/大文字への変換)。
ライブラリには、変換を行うためにOS APIにパントする条件付きコンパイルがありますが、UTF8用のAndroidAPIはないようです。(mbstowcsなど)
このスレッドは、JNIメソッドを使用してそれを実行するように指示しています(!)。これはかなり重いソリューションです。
ICUの構築を考えていましたが、GNU Autotoolsを使用しているため、NDKツールチェーンで動作させることができるかどうかわかりません。:/
他の誰かがこの問題に直面し、JNIを使用する以外のことをしましたか?
編集: ICUをコンパイルさせる試みは、構成ステップで失敗します:
c++ - 新しい UnicodeString を割り当てずに UnicodeString を C 文字列に設定する
ICU 4.2.1 の時点で、UnicodeString を C 文字列に設定する唯一の簡単な方法は、データを使用して新しい UnicodeString を構築し、目的の文字列を新しい文字列に設定して、データの割り当て、コピー、および割り当て解除を行うことです。私が望むよりも。
データを手動で割り当てることなく、UnicodeString を (ヌル終了/長さ) C 文字列に設定する方法はありますか?
たぶん、ICUの新しいバージョンで?(4.2.1 以外のバージョンのドキュメントは確認していません。これが私のディストリビューションの最新バージョンです。)
setTo(const char*)
C文字列でUnicodeStringを構築できることを考えると、メソッドであるべきもののように思えます。
android-ndk - AndroidNDKのICUライブラリ
ICUライブラリ(libicuuc.soおよびlibicui18n.so)に依存するCライブラリのJNIラッパーを作成しようとしています。
NDK(Mac OS Xマシンの標準バージョンとCrystaXバージョンの両方)でICU4Cをビルドしようとしましたが、次のようなリンクの問題が発生し続けました。
また、android ndkのUnicodeサポートで提供された提案を試しましたが、うまくいきませんでした。私は立ち往生しました:
どんな助けでもいただければ幸いです。
unicode - ICUの長所と短所は何ですか?
私のチームは、100万行をはるかに超えるコードであるUnicodeをソフトウェアに実装する任務を負っています。MFCクライアントとWindows、AIX、またはSolaris上のサーバーとOracleまたはSQLServerデータベースをサポートします。ICUは非常に役立つツールのように見えます。ICUを使用することの長所と短所は何ですか?ICUは大きなバグなしで宣伝どおりに機能しますか?
c++ - ICU UnicodeString をプラットフォーム依存の char * (または std::string) に変換します
私のアプリケーションでは、ICU UnicodeString を使用して文字列を保存しています。ICU と互換性のないライブラリを使用しているため、UnicodeString をプラットフォームに依存する表現に変換する必要があります。
基本的に私がする必要があるのは、新しい UnicodeString オブジェクトを作成する逆のプロセス フォームです - 新しい UnicodeString("システム ロケールでエンコードされた文字列")。
このトピックを見つけたので、stringstream を使用して実行できることがわかりました。
だから私の答えは、stringstreamを使用して変換せずに、他のより簡単な方法で行うことができますか?
php - デフォルトのMacOSXLeopardバンドルPHP構成でのPHPPeclIntl拡張機能のインストール/有効化
PHP環境にPHPPeclIntl拡張機能をインストールまたは有効にするにはどうすればよいですか?
Mac OS XSnowLeopardにバンドルされている標準のPHP構成があります。ソースからlibicuをインストールすると$pecl install intl
、次のエラーが発生します。
どんな助けでも本当にありがたいです!
c++ - wchar_t を使用した Unicode と C++ の ICU の不一致
wchar_t
異なるコンパイラでのサポートの場合は一貫性がありませんが、少なくとも Linux では GNU/GCC で実装とサイズが類似していると想定しても安全ですwchar_t
か?
wchar_t
ビットサイズ (32 ビット/64 ビット) に関してサイズにシステム アーキテクチャ依存性があるという事実にもかかわらず、 Linux (GNU/GCC) のワイド文字型は実際にはコンパイラ依存または libstdc++ ライブラリ依存ですか? wchar_t
つまり、サイズとサポートの点で期待どおりに機能しない可能性があると考えるべきものを変更またはアップグレードすることです
IBM ICUは別のオプションですが 、IBM ICU と組み合わせて使用できますstd::string
か?
wchar_t
ICUを支持して完全に却下する必要がありますか?
注: GNU/GCC を使用する Linux などの Unix ライクなオペレーティング システムでは、libstdc++ はコア C++ 機能をコンパイラに提供するため、時々更新されます。
c++ - Unicode 文字列のクロスプラットフォーム反復 (ICU を使用した書記素のカウント)
Unicode 文字列の各文字を反復処理し、各サロゲート ペアを処理し、文字列を 1 つの単位(1 つの書記素)として結合したいと考えています。
例
テキスト「 नमस्ते」はコードポイントで構成されU+0928, U+092E, U+0938, U+094D, U+0924, U+0947
てU+0938
いU+0947
ます。
これで .NET が完成しました。Win32もありますCharNextW()
質問
私が知っている両方の方法は、Microsoft に固有のものです。それを行うポータブルな方法はありますか?
- ICU について聞いたことがありますが、すぐに関連するものを見つけることができませんでした (
UnicodeString(s).length()
それでも 6 が返されます)。ICUの関連する機能/モジュールを指すのは受け入れられる答えでしょう。 - C++ には Unicode の概念がないため、これらの問題に対処するための軽量のクロスプラットフォーム ライブラリが受け入れられる答えになります。
編集:ICUを使用した正解
@McDowell は、BreakIterator
ICU から使用するヒントを与えました。これは、Unicode を扱うための事実上のクロスプラットフォーム標準と見なすことができると思います。その使用法を示すサンプル コードを次に示します (例は 驚くほどまれであるため)。
c - ICUで現在のロケールを取得する
多くのICU関数は、ロケールをパラメーターとして表すchar*を取ります。たとえば、これを静的に「ko_KR」に設定すると、実際にはロケールに依存した方法で動作します。
ただし、時間フォーマットのシステム設定に基づいて現在のロケールを決定したいと思います。私が理解している限り、ほとんどのシステムには、数値、時間、お金などを表示するためのロケール設定があり、これらはすべて異なる可能性があります。これを行う方法についてのアイデアは大歓迎です!