Обнаружение локали от unicode представляет в виде строки в C++

Microsoft Research Акселератор была библиотекой GP GPU.NET.

6
задан Pallavi 17 August 2009 в 13:37
поделиться

3 ответа

Вот как это сделать с Glib :: ustring:

using Glib::ustring;

ustring x("सहस");    // hindi string
bool is_hindi = false;
for (ustring::iterator i = x.begin(); i != x.end(); i ++)
    if (*i >= 0x0900 && *i <= 0x097f)
        is_hindi = true;
2
ответ дан 17 December 2019 в 07:07
поделиться

Первым шагом является написание функтора, чтобы определить, является ли данный wchar_t хинди. Это будет (производным от) a std :: unary_function . Реализация тривиальна: return c> = 0x0900 && c <0x980; . Второй шаг - использовать его: std :: find_if (begin, end, is_hindi ()) .

Поскольку вам понадобится Unicode, вам, вероятно, следует использовать wchar_t и, следовательно, std :: wstring . Ни std :: string , ни GLib :: ustring не поддерживают собственно Unicode. В некоторых системах (в частности, Windows) реализация wchar_t ограничена Unicode 4 = 16 бит, но этого должно быть достаточно для 99,9% населения мира.

Вам потребуется преобразовать из / в UTF-8 при вводе-выводе, но преимущество «один символ = один wchar_t» велико. Например, std :: wstring :: substr () будет работать разумно. Однако у вас все еще могут быть проблемы с такими «символами», как U + 094B (DEVANAGARI VOWEL SIGN O). При итерации по std :: wstring он будет выглядеть как символ вместо модификатора. Это все же лучше, чем std :: string с UTF-8, где вам придется перебирать отдельные байты U + 094B. И если взять только ваши оригинальные примеры, ни один из байтов в UTF8 (U + 094B) не зарезервирован для хинди.

При итерации по std :: wstring он будет выглядеть как символ вместо модификатора. Это все же лучше, чем std :: string с UTF-8, где вам придется перебирать отдельные байты U + 094B. Возьмем только исходные примеры: ни один из байтов в UTF8 (U + 094B) не зарезервирован для хинди.

При итерации по std :: wstring он будет выглядеть как символ вместо модификатора. Это все же лучше, чем std :: string с UTF-8, где вам придется перебирать отдельные байты U + 094B. Возьмем только исходные примеры: ни один из байтов в UTF8 (U + 094B) не зарезервирован для хинди.

1
ответ дан 17 December 2019 в 07:07
поделиться

Если строка уже закодирована как UTF-8, я бы не преобразовывал ее в UTF-16 (я предполагаю, что MSalters называет это «собственно Unicode»), а перебираю кодировку UTF-8. строка и проверьте, есть ли в ней символ хинди.

Используя std :: string, вы можете легко выполнить итерацию с помощью библиотеки UTF8-CPP : - взгляните на utf8 :: next () или класс итератора.

GLib :: ustring имеет итератор , который, кажется, обеспечивает ту же функциональность (не пробовал):

1
ответ дан 17 December 2019 в 07:07
поделиться
Другие вопросы по тегам:

Похожие вопросы: