1

これのより寛容なライセンス(MIT /パブリックドメイン)バージョンを知っている人は誰でも:

http://library.gnome.org/devel/glibmm/unstable/classGlib_1_1ustring.html

(UTF-8 対応の std::string の「ドロップイン」置換)

軽量で、必要なことはすべて実行できます (UTF-XX 変換を使用するかどうかは疑問です)

ICUを持ち歩くのは本当に嫌です。

4

3 に答える 3

7
  1. std :: stringは、UTF-8ストレージに適しています。
  2. テキスト自体を分析する必要がある場合、コードポイントベースで機能しないものがUnicodeに多すぎるため、UTF-8認識はあまり役に立ちません。

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で問題ありません。そうでない場合は、これ以上単純なものは見つかりません。

于 2010-06-08T11:12:33.820 に答える
2

私は一度も使用したことがありませんが、このUTF-8 CPPライブラリを少し前に偶然見つけて、ブックマークするのに十分な気持ちがありました。ライセンス IIUC のような BSD でリリースされます。

それはまだ文字列に依存してstd::stringおり、文字列が実際に UTF-8 であることを確認したり、文字数をカウントしたり、1 文字ずつ前後に移動したりするのに役立つ多くのユーティリティ関数を提供します。非常に小さく、ヘッダー ファイルにのみ存在します。 :本当にいいですね!

于 2010-06-08T11:43:09.360 に答える
2

Björn Höhrmann による柔軟で経済的な UTF-8 デコーダーに興味があるかもしれませんが、それはstd::string.

于 2010-06-08T11:05:58.600 に答える