|
MSVC и GCC: совместимость кодировок исходников
|
|||
---|---|---|---|
#18+
petravТут задача-то проще. Как нам научиться с utf8 выполнять простейшие манипуляции. Видишь ли в чём засада... Офисному софту обычно не надо выполнять эти манипуляции от слова "совсем". petrav я почитал про бинарное представление utf8 и пришёл к выводу, что хотя бы семейство printf будет работать правильно Вынужден тебя огорчить, оно тоже глючит. Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
28.11.2019, 20:08 |
|
MSVC и GCC: совместимость кодировок исходников
|
|||
---|---|---|---|
#18+
Таблицы - это просто концепт. Как вы сделаете функцию внутри - это ваше дело. Если вам повезло и коды символов имеют арифметический порядок как в Ascii - то делайте арифметические операции. По сути вопрос - преобразовывать utf-8=>UTF-16=>utf-8 это может быть вопрос дизайна ВАШЕГО приложения а не библиотеки utf-cpp. Вы сами решаете надо ли вам промежуточное представление в стандарте или вы просто делаете ETL процедуру которая мигрирует пета-байты информации от одной базы к другой. ... |
|||
:
Нравится:
Не нравится:
|
|||
28.11.2019, 20:09 |
|
MSVC и GCC: совместимость кодировок исходников
|
|||
---|---|---|---|
#18+
Кстати я категорический противник такой метафоры что внутри std::string у нас лежит codepage-hell. Я вижу в этом нарушение типизации и очень сложные ошибки runtime. В OpenJDK они решили эту проблему по другому. Они просто не светят наружу байтовое представление строки никогда. java.lang.String валиден всегда и не требует дополнительной проверки на utf-8 validate. Он просто отдает интерфейс генерализованной строки которая выглядит как utf-16 cкоклько на нее не смотри. ... |
|||
:
Нравится:
Не нравится:
|
|||
28.11.2019, 20:12 |
|
MSVC и GCC: совместимость кодировок исходников
|
|||
---|---|---|---|
#18+
Dimitry Sibiryakov petravТут задача-то проще. Как нам научиться с utf8 выполнять простейшие манипуляции. Видишь ли в чём засада... Офисному софту обычно не надо выполнять эти манипуляции от слова "совсем". Ну у всех своя специфика. Мне нужно. Ну ничего я с этим поделать не могу. Dimitry Sibiryakov petrav я почитал про бинарное представление utf8 и пришёл к выводу, что хотя бы семейство printf будет работать правильно Вынужден тебя огорчить, оно тоже глючит. Ну я так понял, что у всех многобайтовых символов во всех байтах включён старший бит. А все управляющие символы (типа %) они ASCII и старший бит у них выключен (не больше 127). Т.е. там есть шанс на корректную работу. ... |
|||
:
Нравится:
Не нравится:
|
|||
28.11.2019, 20:13 |
|
MSVC и GCC: совместимость кодировок исходников
|
|||
---|---|---|---|
#18+
petrav Ну я так понял, что у всех многобайтовых символов во всех байтах включён старший бит. А все управляющие символы (типа %) они ASCII и старший бит у них выключен (не больше 127). Т.е. там есть шанс на корректную работу. Да это похоже на идею префиксного кодирования. Если ее развивать то utf-8 имеет бесконечную разрядность символа. А первая последовательность единичек первого байта по сути обозначает класс октетов. Код: plaintext 1.
... |
|||
:
Нравится:
Не нравится:
|
|||
28.11.2019, 20:20 |
|
MSVC и GCC: совместимость кодировок исходников
|
|||
---|---|---|---|
#18+
Dimitry Sibiryakov maytonПускай будет русский и английский. А потом к ним внезапно добавится немецкий и начнётся веселуха с "SS". хотелось бы подвести какой-то итог... распечатать немецкий SS и прочую кириллицу позволяет простой string а вот чего он НЕ позволяет, так это ровный .substr, .rfind и т.п. также и regex (boost::regex) не может отобразить букву правильно внутри string, например так: [б]уква он покажет только пол-буквы... НО! если перевести временно string -> wstring, то все эти операции пройдут корректно... так годится ли такой вариант, когда всю дорогу юзаем string, а в отдельных ( редких ) случаях переводим в wstring и обратно? ... |
|||
:
Нравится:
Не нравится:
|
|||
28.11.2019, 20:30 |
|
MSVC и GCC: совместимость кодировок исходников
|
|||
---|---|---|---|
#18+
mayton А вы, если знаете что надо поправить в маппинге - прошу добавить ваши changes. ну во1, надо на if-ах там разница раза в 3 обычно во2, чем boost не устроил? ... |
|||
:
Нравится:
Не нравится:
|
|||
28.11.2019, 20:39 |
|
MSVC и GCC: совместимость кодировок исходников
|
|||
---|---|---|---|
#18+
полудух mayton А вы, если знаете что надо поправить в маппинге - прошу добавить ваши changes. ну во1, надо на if-ах там разница раза в 3 обычно во2, чем boost не устроил? По твоей ссылке, подскажи плиз, какие требования предъявляются к WritableRangeT? Это нечто имеющее begin(), end()... и что-то ещё? Каким способом он будет раздвигать или сжимать строку при необходимости? Допустим у меня есть код на Си, унаследованный или с повышенными требованиями к производительности. Вот что делать? ... |
|||
:
Нравится:
Не нравится:
|
|||
28.11.2019, 21:05 |
|
MSVC и GCC: совместимость кодировок исходников
|
|||
---|---|---|---|
#18+
полудух mayton А вы, если знаете что надо поправить в маппинге - прошу добавить ваши changes. ну во1, надо на if-ах там разница раза в 3 обычно во2, чем boost не устроил? По поводу boost - это не ко мне вопрос. Возможно автор не имеет возможности его использовать. ... |
|||
:
Нравится:
Не нравится:
|
|||
28.11.2019, 21:09 |
|
MSVC и GCC: совместимость кодировок исходников
|
|||
---|---|---|---|
#18+
petrav Каким способом он будет раздвигать или сжимать строку при необходимости? так ли это важно? Главное, чтобы работало, не глючило и не тормозило. petrav Допустим у меня есть код на Си, унаследованный или с повышенными требованиями к производительности. Вот что делать? Код: plaintext 1. 2. 3. 4. 5. 6.
... |
|||
:
Нравится:
Не нравится:
|
|||
28.11.2019, 21:39 |
|
MSVC и GCC: совместимость кодировок исходников
|
|||
---|---|---|---|
#18+
конкатенацию, кстати, лучше всего делать через str += str2.append(str3).append(str4) ... |
|||
:
Нравится:
Не нравится:
|
|||
28.11.2019, 21:40 |
|
MSVC и GCC: совместимость кодировок исходников
|
|||
---|---|---|---|
#18+
+= и .append() это одна ф-я ... |
|||
:
Нравится:
Не нравится:
|
|||
28.11.2019, 21:41 |
|
MSVC и GCC: совместимость кодировок исходников
|
|||
---|---|---|---|
#18+
mayton полудух По поводу boost - это не ко мне вопрос. Возможно автор не имеет возможности его использовать. Чем меня бесит boost тем что можно неделю читать по вечерам документацию на какую-то из его библиотек, а потом выяснить, что простейшую вещь сделать нельзя. Вот смотрим. Нам дали ссылку на библиотеку Boost.StringAlgo. Смотрим пример кода: Код: plaintext 1. 2. 3. 4.
Ищем класс iterator_range. И находим его в библиотеке Range 2.0 . Вот сейчас выяснится что единственное требование к шаблонному параметру класса iterator_range<> -- это operator++(). Т.е. ничего про utf-8 он знать не может когда его шаблонный параметр char*. И про размеры буфера тоже он ничего не знает - хотя мог бы, ему же подставили массив известного размера. Или выяснится что это всё агрессивно работает с динамической памятью, а через год они поменяют интерфейс этой библиотеки. Или вообще она станет deprecated. А ведь задача то простейшая: Код: plaintext 1.
Или как-то так. ... |
|||
:
Нравится:
Не нравится:
|
|||
28.11.2019, 21:42 |
|
MSVC и GCC: совместимость кодировок исходников
|
|||
---|---|---|---|
#18+
petrav, Ну не нравится boost возьми это https://unicode-org.github.io/icu-docs/apidoc/released/icu4c/ustring_8h.html#a14740e3b734ffa82205d4762fcacb5e1 ... |
|||
:
Нравится:
Не нравится:
|
|||
28.11.2019, 21:49 |
|
MSVC и GCC: совместимость кодировок исходников
|
|||
---|---|---|---|
#18+
Там тоже нет универальной локали. Там только для 1 варианта. ... |
|||
:
Нравится:
Не нравится:
|
|||
28.11.2019, 21:52 |
|
MSVC и GCC: совместимость кодировок исходников
|
|||
---|---|---|---|
#18+
Кстати! Обратите внимание, что библиотека называет Boost Range 2.0 -- это означает, что библиотеку Range 1.0 они уже похерили. И это нормально для них, завтра ты будешь переписывать свой код потому что выйдет Range 3.0. А может им просто надоест эта библиотека и ты останешься один с её глюками. ... |
|||
:
Нравится:
Не нравится:
|
|||
28.11.2019, 21:55 |
|
MSVC и GCC: совместимость кодировок исходников
|
|||
---|---|---|---|
#18+
Мы куда-то не туда свернули. Топик начался с кодировок исходников. Закончили обсуждением бустов. ... |
|||
:
Нравится:
Не нравится:
|
|||
28.11.2019, 22:12 |
|
MSVC и GCC: совместимость кодировок исходников
|
|||
---|---|---|---|
#18+
petrav Код: plaintext 1.
есть же string::rfind(): Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15.
... |
|||
:
Нравится:
Не нравится:
|
|||
28.11.2019, 22:18 |
|
MSVC и GCC: совместимость кодировок исходников
|
|||
---|---|---|---|
#18+
как раз это - основная причина того, что на библиотеку забивают когда в std вышел вариант лучше ... |
|||
:
Нравится:
Не нравится:
|
|||
28.11.2019, 22:20 |
|
MSVC и GCC: совместимость кодировок исходников
|
|||
---|---|---|---|
#18+
полудух как раз это - основная причина того, что на библиотеку забивают когда в std вышел вариант лучше Там смысл примера из Boost.StringAlgo в том, что потенциально там всё без обращения к динамической памяти. Пора завязывать обсуждение Бустов :) ... |
|||
:
Нравится:
Не нравится:
|
|||
28.11.2019, 22:30 |
|
MSVC и GCC: совместимость кодировок исходников
|
|||
---|---|---|---|
#18+
юзай string_view и тоже будет без аллокаций boost прекрасен, его можно бесконечно обсуждать... вот тестил boost::format (аналог sprintf()), потому что как поменять много всего в строке utf8 ? sprintf() - супер ф-я на все времена, но ей char подавай ( и вот boost::format... заявлен, как аналоХ printf()... пошёл тестить строку с 15ю заменами (в цикле конечно): sprintf() = 220ms boost::format = 1044ms Обаный стыд а ещё выгребаем геморрой с заменой boost::basic_format<char> на string, потому что конкатенацию хочецца апосля сделать... но static_cast про него, например, знать не знает... ... |
|||
:
Нравится:
Не нравится:
|
|||
28.11.2019, 22:48 |
|
MSVC и GCC: совместимость кодировок исходников
|
|||
---|---|---|---|
#18+
Что там у вас? Свой шаблонизатор? Я думаю обычный билдер строки сработает еще раз в 10 быстрее. А функция (s)printf всегда почему-то висела в топе небезопасных функций по версии всех security отчотов. ... |
|||
:
Нравится:
Не нравится:
|
|||
28.11.2019, 22:52 |
|
MSVC и GCC: совместимость кодировок исходников
|
|||
---|---|---|---|
#18+
mayton А функция (s)printf всегда почему-то висела в топе небезопасных функций потому что stack overflow - самая частая атака на все времена Код: plaintext 1. 2. 3. 4. 5. 6. 7.
ты на строковые потоки чтоли всё намекаешь? Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11.
... |
|||
:
Нравится:
Не нравится:
|
|||
28.11.2019, 23:00 |
|
MSVC и GCC: совместимость кодировок исходников
|
|||
---|---|---|---|
#18+
mayton Что там у вас? Свой шаблонизатор? Я думаю обычный билдер строки сработает еще раз в 10 быстрее. А функция (s)printf всегда почему-то висела в топе небезопасных функций по версии всех security отчотов. boost.format -- замена sprintf. Замена безопасная по следующим аспектам: - Размер буфера. - Типы данных. - Корректность формата. - Соответствие формата и передаваемых параметров. Типа безопасный С++ вариант sprintf. Вот это хорошая штука и не замороченная. И мега полезная. И поддерживает utf-8, вроде бы. ... |
|||
:
Нравится:
Не нравится:
|
|||
28.11.2019, 23:02 |
|
MSVC и GCC: совместимость кодировок исходников
|
|||
---|---|---|---|
#18+
ты на строковые потоки чтоли всё намекаешь? Нет я не имею в виду потоки. Просто движки шаблонов делают не просто замены в тексте. А обычно формируют некую логику билдера. Возможно используют циклы внутри (таблица внутри отчота) наподобие Apache Velocity. И обладают некой логикой языка выражений (expression language). ... |
|||
:
Нравится:
Не нравится:
|
|||
28.11.2019, 23:49 |
|
|
start [/forum/topic.php?fid=57&msg=39895951&tid=2017506]: |
0ms |
get settings: |
10ms |
get forum list: |
13ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
37ms |
get topic data: |
10ms |
get forum data: |
2ms |
get page messages: |
55ms |
get tp. blocked users: |
1ms |
others: | 260ms |
total: | 396ms |
0 / 0 |