2016-07-12 11 views
1

私はC/C++でICUでいくつかのテストを成功させました。私は異なるエンコーディング(UTF-8、UTF-16LEなど)で異なるCSVファイルを解析し、データにいくつかの変更を行い、最後にすべてをUTF-8としてファイルに出力する必要があります。だから私の選択はICUのために落ちました。文字セットの検出は、通常、文字の処理とUTF-8への変換に非常によく機能します。ICUとNanaを使ったC++ GUIライブラリ - 文字列変換?

これで、CSVの読み込みや操作などを行うライブラリ部分をGUIライブラリNanaで統合したいと考えました。ナナはstd :: stringとstd :: wstringを使うようです。

ICUはすべてのデータを内部的にUTF-16として保存するので、ICUで作業するときはUCharsまたはUnicodeStringを取得する必要があります。しかし、どのようにICUに統合されていない、ナナと一緒に使うことができますか? UChar配列をwstringに変換する方法やUnicodeStringをwstringに変換する方法はありますか?

ICUのマニュアルには何もヒントがありませんでしたので、他の誰かが既にそれに取り組んでいたのでしょうか?

答えて

1

ほとんどのnana関数は、UTF-8でコード化されたstd::stringを期待しています。

char *を取るか返すICU functionsを使用して、UTF-8への変換を行うことができます。

widget::captionのようないくつかのnana関数は、文字列である可能性のあるOSに渡すために使用できるUTF-16(Windows)またはUTF-32(Linux)でエンコードされると予想されるstd::wstringのオーバーロードを持っています。ネイティブの文字タイプとエンコーディングを使用します。 変換が必要な場合nanaは、UTF-8/UTF-16/UTF-32との間で最も頻繁に必要な変換を(明示的または暗黙的に)管理できるnana::charsetを提供しています。

static_cast<wchar_t *>(some_UChar*)をナナに渡して実験した場合は、結果を教えてください。私はテストすることはできません。

早急に更新する必要があるUnicodeの治療についてのナナのドキュメント(MEAのculpa)これが真のw.r.t.が

+0

こんにちは!もちろん、それらのICU機能をテストします。私はちょうどUCharをwchar_t *に変換することを可能にする 'u_strToWCS'のようなICUの関数を見つけたので、これは動作していると確信しています。 static_cast でいくつかの実験を行い、何が起こるかをお知らせします。私の期待は、これはWindows上ではうまくいくが、Unix/Linuxプラットフォームではうまくいくということだ。 – inzanez

+0

あなたのUChar *文字列に端末0を追加する必要があるかもしれない? – qPCR4vir

+0

に依存します。通常、ICUの文字列操作関数で作業するときは、関数(u_sprintfなど)によって追加されます。それ以外の場合は、自分で追加する必要があります。 – inzanez

0

ICUの文書によると、UChar配列は16ビット幅の文字の配列です...一般的な実装ではwchar_t配列を意味します。これは、提供されたwchar_tがシステム内で16ビット幅であることを意味し、getTerminatedBuffer()関数の結果をconst wchar_t *に安全にキャストし、Cワイド文字列として直接使用するか、std::wstringを構築するために使用します。

+0

ではありませんあなたが 'UChar'が' wchar_t'であることを確かめない限り、厳密なエイリアシングはありません。 –

+0

UCharとwchar_tの両方が同じサイズの整数型である場合、それらは同じ型です(符号のみが問題を引き起こす可能性があります)。 –

+0

CではなくC++ではtrueです。 C++では、 'wchar_t'はtypedefではなく独自の型です。 –

関連する問題