Здравствуйте, Erop, Вы писали:
O>>Какой ? К примеру, на Visual C++ любые конструкторы std::locale, инициализированные строками O>>вроде "ru_RU.utf-8", обламываются.
E>Ну ты же сам можешь его реализовать, если библа не поддреживает...
Не надо ничего реализовывать, всё украдено до нас. Просто в виндах национальные локали называются иначе, чем во всём мире. http://msdn.microsoft.com/en-us/library/hzz3tw78(v=VS.71).aspx
То есть, не ru_RU, а rus_rus или просто russian. А немецкий, соответственно, deu или german.
(Я тоже был немало удивлён, когда setlocale("ru_RU.1251") обломался в русской винде. Но не сдался, а полез читать этот rtfm.
Здравствуйте, okman, Вы писали:
O>Вот практический пример. O>Задача — написать библиотеку, которая фильтрует веб-контент и вырезает из него запрещенные слова. O>Контент идет на разных языках и в разных кодировках (чаще всего — в UTF-8). O>Вот и как тут пользоваться std::string, если она BOM не понимает, нормализацию делать не умеет, и O>даже не может преобразовать найденное слово к нижнему/верхнему регистру ?
Берём поток байтов (std::string) в известной нам произвольной кодировке (в том числе 2х- или 4х-байтовой) и приводим к удобной нам универсальной кодировке.
Зачастую достаточно mbtows (перевод в UTF-16 или -32) и, если нам не нравится std::wstring, обратно wstomb в UTF-8.
После этого, зная о языке контента, выполняем нормализацию (вот тут стандартной сишной библиотеки, видимо, уже не хватит), лезем в соответствующий словарь и режем матюки на этом языке.
O>Visual C++ выбрасывает исключение, если создать локаль с именем "ru_RU.utf8" (другие варианты тоже пробовались).
E>>А что значит "буковок"? Вот, например, Ы -- это скока буковок?.. А арабское слово, какое-нибудь? А арабское слово с огласовками?
S>Я так понимаю — это одна буква
Это ты про арабское слов или про арабское слово с огласовками?
А как ты проведёшь граицы букв в тайском, например, где есть такая буква, один из элементов которой вседа пишется над предыдущей?
Все эмоциональные формулировки не соотвествуют действительному положению вещей и приведены мной исключительно "ради красного словца". За корректными формулировками и неискажённым изложением идей, следует обращаться к их автором или воспользоваться поиском
PD>Именно этим функция и занимается. Как — вопрос к MS. А выделил я не локаль (это очевидно, что она тут нужна), а просто тот факт, что на входе ей можно подавать и Юникод, и ASCII.
не "юникод", а UTF-16, а вот UTF-8, например, вроде как нельзя
Все эмоциональные формулировки не соотвествуют действительному положению вещей и приведены мной исключительно "ради красного словца". За корректными формулировками и неискажённым изложением идей, следует обращаться к их автором или воспользоваться поиском
Здравствуйте, Erop, Вы писали:
E>Это ты про арабское слов или про арабское слово с огласовками?
Думаю — в арабском юникоде это разные символы просто. Не в курсе, как они сделали?
E>А как ты проведёшь граицы букв в тайском, например, где есть такая буква, один из элементов которой вседа пишется над предыдущей?
Пишется — это совсем другое дело. Все, естественно, зависит от задачи, от применения.
Решать абстрактные задачи в вакууме — тут, конечно, можно и задуматься, а что же считать буквой
Здравствуйте, sidorov18, Вы писали:
S>Думаю — в арабском юникоде это разные символы просто. Не в курсе, как они сделали?
Есть коды-модификаторы, добавляющие огласовку к букве...
S>Пишется — это совсем другое дело. Все, естественно, зависит от задачи, от применения. S>Решать абстрактные задачи в вакууме — тут, конечно, можно и задуматься, а что же считать буквой
Ну я вот про тоже самое. Что понятие "буква" хорошо определено далеко не во всех языках...
Дальше начинаем сильно зависеть от задачи и вообще порастаем подробностями. То есть отличия в кодировках становятся несущественны, по сравнению с остальным гемором
Все эмоциональные формулировки не соотвествуют действительному положению вещей и приведены мной исключительно "ради красного словца". За корректными формулировками и неискажённым изложением идей, следует обращаться к их автором или воспользоваться поиском
Здравствуйте, Erop, Вы писали:
E>не "юникод", а UTF-16, а вот UTF-8, например, вроде как нельзя
Это ты где хочешь говори, но только не когда речь идет о функциях Win API. Им на вход подается либо ANSI-строка, либо UNICODE- строка (да, конечно, UTF-16, но терминология здесь именно такая). Никаких UTF-8 строк в Win API нет и передавать их никуда нельзя, кроме как в MultiByteToWideChar и т.п.
Здравствуйте, Аноним, Вы писали:
А>Подскажите пожалуйста, как в С++ работать со строками в кодировке UTF-8 ? А>(требуется стандартный набор строковых функций — strcmp(), strcat(), strcpy()... )