2011-02-03 26 views

risposta

8

Come ho scritto in another question, utf8proc è una libreria molto semplice e leggera per le funzionalità di base Unicode, inclusa la normalizzazione delle stringhe Unicode.

+0

Ho problemi con Visual Studio 2010 con utf8proc. typedef unsigned char bool; -> dosen non compilare in C++ –

+0

Non ho familiarità con VS 2010, ma non puoi compilare la libreria come libreria C e collegarla in quel modo? – Avi

+0

Il problema è nel file di intestazione, ecco perché non possiamo usarlo nemmeno come libreria statica. Una semplice soluzione è sostituire bool, true, false con _bool, _true, _false. Esempio: typedef unsigned char _bool; enum {_false, _true}; –

1

"Leggero" nel vostro contesto significa "con funzionalità limitata". Vorrei utilizzare la sorgente ICU come esempio e fare riferimento a http://unicode.org/reports/tr15/ per implementare questa funzionalità "leggera".

2

È possibile creare ICU con il minimo (o forse nessun altro dato - penso che tutti i dati di normalizzazione siano ora interni) e quindi collegare staticamente. Non l'ho provato di recente, ma credo che in questo caso la dimensione totale sia piuttosto piccola.

3

Per Windows, non v'è la funzione NormalizeString() (purtroppo per Vista e versioni successive solo - per quanto vedo su MSDN):

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

E 'il modo più semplice per andare che ho trovato finora . Immagino che sia anche abbastanza leggero.

int NormalizeString(
    _In_  NORM_FORM NormForm, 
    _In_  LPCWSTR lpSrcString, 
    _In_  int  cwSrcLength, 
    _Out_opt_ LPWSTR lpDstString, 
    _In_  int  cwDstLength 
); 
1

Una buona soluzione UTF-8 è la funzione g_utf8_normalize() di glib. Richiederebbe convertire std :: wstring in std :: string (utf16 in utf8) se necessario anche per wstring (il che renderebbe una soluzione piuttosto costosa, quindi mi sto cercando una soluzione migliore, se possibile con puro C++ (11) significa).