Der erste Schritt ist das Schreiben eines Funktors, um festzustellen, ob ein gegebenes wchar_t Hindi ist. Dies wird (abgeleitet von) std::unary_function<wchar_t, bool>
sein. Die Implementierung ist trivial: return c>= 0x0900 && c < 0x980;
. Der zweite Schritt ist es zu verwenden: std::find_if(begin, end, is_hindi())
.
Da Sie Unicode benötigen, sollten Sie wahrscheinlich wchar_t
und daher std::wstring
verwenden. Weder std::string
noch GLib::ustring
unterstützt Unicode. Auf einigen Systemen (insbesondere Windows) ist die Implementierung von wchar_t
auf Unicode 4 = 16 Bit beschränkt, aber das sollte immer noch für 99,9% der Weltbevölkerung ausreichen.
Sie müssen von/in UTF-8 auf I/O konvertieren, aber der Vorteil von "ein Zeichen = ein wchar_t" ist groß. Zum Beispiel wird std::wstring::substr()
vernünftig funktionieren. Sie könnten jedoch immer noch Probleme mit "Zeichen" wie U + 094B (DEVANAGARI VOWEL SIGN O) haben. Wenn Sie über ein std :: wstring-Objekt iterieren, erscheint dieses anstelle eines Modifikators als eigenständiges Zeichen. Das ist immer noch besser als std :: string mit UTF-8, wo Sie am Ende über die einzelnen Bytes von U + 094B iterieren würden. Und um nur Ihre ursprünglichen Beispiele zu nehmen, ist keines der Bytes in UTF8(U+094B)
für Hindi reserviert.
Was ist die Codierung, die Sie verwenden? – AraK
Ich benutze UTF-8. – Pallavi