Re[9]: Ох уж эти любители серябрянных пуль... ;)
От: Кодт Россия  
Дата: 28.10.11 15:36
Оценка: 8 (1) :)
Здравствуйте, 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.
Перекуём баги на фичи!
Re[6]: C++ и UTF8
От: Кодт Россия  
Дата: 28.10.11 15:48
Оценка:
Здравствуйте, 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" (другие варианты тоже пробовались).


rus_rus. Особенности винды.
Перекуём баги на фичи!
Re[6]: C++ и UTF8
От: Erop Россия  
Дата: 28.10.11 16:02
Оценка:
Здравствуйте, sidorov18, Вы писали:


E>>А что значит "буковок"? Вот, например, Ы -- это скока буковок?.. А арабское слово, какое-нибудь? А арабское слово с огласовками?


S>Я так понимаю — это одна буква


Это ты про арабское слов или про арабское слово с огласовками?
А как ты проведёшь граицы букв в тайском, например, где есть такая буква, один из элементов которой вседа пишется над предыдущей?
Все эмоциональные формулировки не соотвествуют действительному положению вещей и приведены мной исключительно "ради красного словца". За корректными формулировками и неискажённым изложением идей, следует обращаться к их автором или воспользоваться поиском
Re[11]: C++ и UTF8
От: Erop Россия  
Дата: 28.10.11 16:04
Оценка:
Здравствуйте, Pavel Dvorkin, Вы писали:


PD>Именно этим функция и занимается. Как — вопрос к MS. А выделил я не локаль (это очевидно, что она тут нужна), а просто тот факт, что на входе ей можно подавать и Юникод, и ASCII.


не "юникод", а UTF-16, а вот UTF-8, например, вроде как нельзя
Все эмоциональные формулировки не соотвествуют действительному положению вещей и приведены мной исключительно "ради красного словца". За корректными формулировками и неискажённым изложением идей, следует обращаться к их автором или воспользоваться поиском
Re[7]: C++ и UTF8
От: sidorov18 США  
Дата: 28.10.11 20:41
Оценка:
Здравствуйте, Erop, Вы писали:

E>Это ты про арабское слов или про арабское слово с огласовками?


Думаю — в арабском юникоде это разные символы просто. Не в курсе, как они сделали?

E>А как ты проведёшь граицы букв в тайском, например, где есть такая буква, один из элементов которой вседа пишется над предыдущей?


Пишется — это совсем другое дело. Все, естественно, зависит от задачи, от применения.
Решать абстрактные задачи в вакууме — тут, конечно, можно и задуматься, а что же считать буквой
Re[8]: C++ и UTF8
От: Erop Россия  
Дата: 29.10.11 05:37
Оценка:
Здравствуйте, sidorov18, Вы писали:

S>Думаю — в арабском юникоде это разные символы просто. Не в курсе, как они сделали?

Есть коды-модификаторы, добавляющие огласовку к букве...

S>Пишется — это совсем другое дело. Все, естественно, зависит от задачи, от применения.

S>Решать абстрактные задачи в вакууме — тут, конечно, можно и задуматься, а что же считать буквой

Ну я вот про тоже самое. Что понятие "буква" хорошо определено далеко не во всех языках...
Дальше начинаем сильно зависеть от задачи и вообще порастаем подробностями. То есть отличия в кодировках становятся несущественны, по сравнению с остальным гемором
Все эмоциональные формулировки не соотвествуют действительному положению вещей и приведены мной исключительно "ради красного словца". За корректными формулировками и неискажённым изложением идей, следует обращаться к их автором или воспользоваться поиском
Re[12]: C++ и UTF8
От: Pavel Dvorkin Россия  
Дата: 29.10.11 07:32
Оценка:
Здравствуйте, Erop, Вы писали:

E>не "юникод", а UTF-16, а вот UTF-8, например, вроде как нельзя


Это ты где хочешь говори, но только не когда речь идет о функциях Win API. Им на вход подается либо ANSI-строка, либо UNICODE- строка (да, конечно, UTF-16, но терминология здесь именно такая). Никаких UTF-8 строк в Win API нет и передавать их никуда нельзя, кроме как в MultiByteToWideChar и т.п.
With best regards
Pavel Dvorkin
Re: C++ и UTF8
От: Denys V. Украина http://ua.linkedin.com/in/dvalchuk
Дата: 30.10.11 10:45
Оценка: 15 (1)
Здравствуйте, Аноним, Вы писали:

А>Подскажите пожалуйста, как в С++ работать со строками в кодировке UTF-8 ?

А>(требуется стандартный набор строковых функций — strcmp(), strcat(), strcpy()... )

когда то я уже постил подобное здесь
Автор: Dj.ValDen
Дата: 17.04.08
UTF8-CPP: UTF-8 with C++ in a Portable Way
С уважением Denys Valchuk

IMHO чем больше мнений тем оптимальней выбор варианта... :)
utf8 c++
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.