これのより寛容なライセンス(MIT /パブリックドメイン)バージョンを知っている人は誰でも:
http://library.gnome.org/devel/glibmm/unstable/classGlib_1_1ustring.html
(UTF-8 対応の std::string の「ドロップイン」置換)
軽量で、必要なことはすべて実行できます (UTF-XX 変換を使用するかどうかは疑問です)
ICUを持ち歩くのは本当に嫌です。
これのより寛容なライセンス(MIT /パブリックドメイン)バージョンを知っている人は誰でも:
http://library.gnome.org/devel/glibmm/unstable/classGlib_1_1ustring.html
(UTF-8 対応の std::string の「ドロップイン」置換)
軽量で、必要なことはすべて実行できます (UTF-XX 変換を使用するかどうかは疑問です)
ICUを持ち歩くのは本当に嫌です。
Boost.Localeライブラリを見てください(内部でICUを使用しています):
軽量ではありませんが、Unicodeを正しく処理できstd::string
、ストレージとして使用できます。
文字列を処理するUnicode対応の軽量ライブラリを見つけることを期待している場合、Unicodeは軽量ではないため、そのようなものは見つかりません。また、大文字、小文字の変換、Unicode正規化などの比較的「単純な」ものでも、複雑なアルゴリズムとUnicodeデータベースアクセスが必要です。
コードポイント(ところで文字ではない)を反復処理する機能が必要な場合は、http: //utfcpp.sourceforge.net/を参照してください。
コメントへの回答:
1)私が含めたファイルのファイル形式を探す
std :: string::findはこれには完全に問題ありません。
2)改行検出
これは単純な問題ではありません。中国語/日本語のテキストで改行を見つけようとしたことがありますか?おそらくスペースが単語を分離しないのでそうではありません。したがって、改行の検出は大変な作業です。(私はglibでさえこれを正しく行うとは思わない、私はパンゴだけがそのようなものを持っていると思う)
そしてもちろん、Boost.Localeはこれを正しく行います。
また、ヨーロッパ言語でのみこれを行う必要がある場合は、スペースまたは句読点を検索するだけでstd::string::find
十分です。
3)文字(または現在のコードポイント)のカウントutfcppthxを見る
文字はコードポイントではありません。たとえば、ヘブライ語のShalom-「שָלוֹם」は4文字と6つのUnicodeポイントで構成され、2つのコードポイントが母音に使用されます。単一の文字で2つのコードポイントで表されるヨーロッパ言語でも同じです。たとえば、「ü」は「u」および「¨」(2つのコードポイント)として表すことができます。
したがって、これらの問題を認識している場合は、utfcppで問題ありません。そうでない場合は、これ以上単純なものは見つかりません。
私は一度も使用したことがありませんが、このUTF-8 CPPライブラリを少し前に偶然見つけて、ブックマークするのに十分な気持ちがありました。ライセンス IIUC のような BSD でリリースされます。
それはまだ文字列に依存してstd::string
おり、文字列が実際に UTF-8 であることを確認したり、文字数をカウントしたり、1 文字ずつ前後に移動したりするのに役立つ多くのユーティリティ関数を提供します。非常に小さく、ヘッダー ファイルにのみ存在します。 :本当にいいですね!
Björn Höhrmann による柔軟で経済的な UTF-8 デコーダーに興味があるかもしれませんが、それはstd::string
.