16

C/C++ で文字列 (utf-8/utf-16 を含む) を正規化する方法を知りたいです。.NET には、関数String.Normalizeがあります。

以前は UTF8-CPP を使っていましたが、そのような機能はありません。 ICUと Qt は文字列の正規化を提供しますが、私は軽量のソリューションを好みます。

これに対する「軽量」ソリューションはありますか?

4

5 に答える 5

11

別の質問で書いたように、utf8procは、Unicode 文字列の正規化を含む、基本的な Unicode 機能のための非常に優れた軽量のライブラリです。

于 2011-02-03T10:25:04.313 に答える
4

Windowsの場合、NormalizeString()機能があります(残念ながらVista以降のみ-MSDNで見る限り):

http://msdn.microsoft.com/en-us/library/windows/desktop/dd319093%28v=vs.85%29.aspx

これまでに見つけた中で最も簡単な方法です。これもかなり軽いと思います。

int NormalizeString(
    _In_      NORM_FORM NormForm,
    _In_      LPCWSTR   lpSrcString,
    _In_      int       cwSrcLength,
    _Out_opt_ LPWSTR    lpDstString,
    _In_      int       cwDstLength
);
于 2013-03-01T04:45:31.087 に答える
2

最小限のデータでICUを構築し(または、他のデータがない場合、すべての正規化データが内部にあると思います)、静的にリンクすることができます。最近は試していませんが、その場合は全体のサイズがかなり小さいと思います。

于 2011-02-05T01:10:14.280 に答える
1

あなたのコンテキストでの「軽量」は、「機能が制限されている」ことを意味します。ICU ソースを例として使用し、 http: //unicode.org/reports/tr15/を参照してこの「軽量」機能を実装します。

于 2011-02-03T10:39:40.847 に答える
1

優れた UTF-8 ソリューションは、glib のg_utf8_normalize()関数です。wstringにもこれが必要な場合は、std::wstringをstd::string(utf16からutf8に)に変換する必要があります(これは非常に高価なソリューションになるため、可能であれば純粋なC++(11) の意味)。

于 2015-07-05T12:54:05.017 に答える