powered by simpleCommunicator - 2.0.58     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / C++ [игнор отключен] [закрыт для гостей] / MSVC и GCC: совместимость кодировок исходников
25 сообщений из 409, страница 7 из 17
MSVC и GCC: совместимость кодировок исходников
    #39895924
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
petravТут задача-то проще. Как нам научиться с utf8 выполнять простейшие манипуляции.

Видишь ли в чём засада... Офисному софту обычно не надо выполнять эти манипуляции от слова
"совсем".

petrav я почитал про бинарное представление utf8 и пришёл к выводу, что хотя бы
семейство printf будет работать правильно
Вынужден тебя огорчить, оно тоже глючит.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
MSVC и GCC: совместимость кодировок исходников
    #39895925
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Таблицы - это просто концепт. Как вы сделаете функцию внутри - это ваше дело. Если вам повезло
и коды символов имеют арифметический порядок как в Ascii - то делайте арифметические операции.

По сути вопрос - преобразовывать utf-8=>UTF-16=>utf-8 это может быть вопрос дизайна ВАШЕГО приложения
а не библиотеки utf-cpp. Вы сами решаете надо ли вам промежуточное представление в стандарте или вы просто
делаете ETL процедуру которая мигрирует пета-байты информации от одной базы к другой.
...
Рейтинг: 0 / 0
MSVC и GCC: совместимость кодировок исходников
    #39895927
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Кстати я категорический противник такой метафоры что внутри std::string у нас лежит codepage-hell.
Я вижу в этом нарушение типизации и очень сложные ошибки runtime. В OpenJDK они решили эту проблему
по другому. Они просто не светят наружу байтовое представление строки никогда. java.lang.String
валиден всегда и не требует дополнительной проверки на utf-8 validate. Он просто отдает интерфейс
генерализованной строки которая выглядит как utf-16 cкоклько на нее не смотри.
...
Рейтинг: 0 / 0
MSVC и GCC: совместимость кодировок исходников
    #39895928
petrav
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry Sibiryakov

petravТут задача-то проще. Как нам научиться с utf8 выполнять простейшие манипуляции.

Видишь ли в чём засада... Офисному софту обычно не надо выполнять эти манипуляции от слова
"совсем".
Ну у всех своя специфика. Мне нужно. Ну ничего я с этим поделать не могу.

Dimitry Sibiryakov
petrav я почитал про бинарное представление utf8 и пришёл к выводу, что хотя бы
семейство printf будет работать правильно

Вынужден тебя огорчить, оно тоже глючит.

Ну я так понял, что у всех многобайтовых символов во всех байтах включён старший бит. А все управляющие символы (типа %) они ASCII и старший бит у них выключен (не больше 127). Т.е. там есть шанс на корректную работу.
...
Рейтинг: 0 / 0
MSVC и GCC: совместимость кодировок исходников
    #39895929
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
petrav

Ну я так понял, что у всех многобайтовых символов во всех байтах включён старший бит. А все управляющие символы (типа %) они ASCII и старший бит у них выключен (не больше 127). Т.е. там есть шанс на корректную работу.

Да это похоже на идею префиксного кодирования. Если ее развивать то utf-8 имеет бесконечную разрядность символа.
А первая последовательность единичек первого байта по сути обозначает класс октетов.

Код: plaintext
1.
11110xxx 10xxxxxx 10xxxxxx 10xxxxxx
...
Рейтинг: 0 / 0
MSVC и GCC: совместимость кодировок исходников
    #39895934
Фотография полудух
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry Sibiryakov
maytonПускай будет русский и английский.

А потом к ним внезапно добавится немецкий и начнётся веселуха с "SS".
хотелось бы подвести какой-то итог...
распечатать немецкий SS и прочую кириллицу позволяет простой string
а вот чего он НЕ позволяет, так это ровный .substr, .rfind и т.п.
также и regex (boost::regex) не может отобразить букву правильно внутри string, например так: [б]уква
он покажет только пол-буквы...
НО!
если перевести временно string -> wstring, то все эти операции пройдут корректно...
так годится ли такой вариант, когда всю дорогу юзаем string, а в отдельных ( редких ) случаях переводим в wstring и обратно?
...
Рейтинг: 0 / 0
MSVC и GCC: совместимость кодировок исходников
    #39895938
Фотография полудух
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mayton
А вы, если знаете что надо поправить в маппинге - прошу добавить ваши changes.

ну во1, надо на if-ах
там разница раза в 3 обычно
во2, чем boost не устроил?
...
Рейтинг: 0 / 0
MSVC и GCC: совместимость кодировок исходников
    #39895943
petrav
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
полудух
mayton
А вы, если знаете что надо поправить в маппинге - прошу добавить ваши changes.

ну во1, надо на if-ах
там разница раза в 3 обычно
во2, чем boost не устроил?

По твоей ссылке, подскажи плиз, какие требования предъявляются к WritableRangeT? Это нечто имеющее begin(), end()... и что-то ещё? Каким способом он будет раздвигать или сжимать строку при необходимости?

Допустим у меня есть код на Си, унаследованный или с повышенными требованиями к производительности. Вот что делать?
...
Рейтинг: 0 / 0
MSVC и GCC: совместимость кодировок исходников
    #39895946
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
полудух
mayton
А вы, если знаете что надо поправить в маппинге - прошу добавить ваши changes.

ну во1, надо на if-ах
там разница раза в 3 обычно
во2, чем boost не устроил?

По поводу boost - это не ко мне вопрос.
Возможно автор не имеет возможности его использовать.
...
Рейтинг: 0 / 0
MSVC и GCC: совместимость кодировок исходников
    #39895951
Фотография полудух
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
petrav
Каким способом он будет раздвигать или сжимать строку при необходимости?

так ли это важно? Главное, чтобы работало, не глючило и не тормозило.
petrav
Допустим у меня есть код на Си, унаследованный или с повышенными требованиями к производительности. Вот что делать?

Код: plaintext
1.
2.
3.
4.
5.
6.
# char* -> string
string name = "World"s + " hello"; // теперь есть буква "s", которая на самом деле ф-я()
wstring name = L"World"s + L" hello";
u32string name = U"World"s + U" hello"; // utf32
const char* s = "Hello, World!";
string str(s); // там свой конструктор
...
Рейтинг: 0 / 0
MSVC и GCC: совместимость кодировок исходников
    #39895952
Фотография полудух
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
конкатенацию, кстати, лучше всего делать через str += str2.append(str3).append(str4)
...
Рейтинг: 0 / 0
MSVC и GCC: совместимость кодировок исходников
    #39895953
Фотография полудух
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
+= и .append() это одна ф-я
...
Рейтинг: 0 / 0
MSVC и GCC: совместимость кодировок исходников
    #39895954
petrav
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mayton
полудух
пропущено...

ну во1, надо на if-ах
там разница раза в 3 обычно
во2, чем boost не устроил?

По поводу boost - это не ко мне вопрос.
Возможно автор не имеет возможности его использовать.

Чем меня бесит boost тем что можно неделю читать по вечерам документацию на какую-то из его библиотек, а потом выяснить, что простейшую вещь сделать нельзя. Вот смотрим. Нам дали ссылку на библиотеку Boost.StringAlgo. Смотрим пример кода:

Код: plaintext
1.
2.
3.
4.
char text[]="hello dolly!";
iterator_range<char*> result=find_last(text,"ll");

transform( result.begin(), result.end(), result.begin(), bind2nd(plus<char>(), 1) );



Ищем класс iterator_range. И находим его в библиотеке Range 2.0 . Вот сейчас выяснится что единственное требование к шаблонному параметру класса iterator_range<> -- это operator++(). Т.е. ничего про utf-8 он знать не может когда его шаблонный параметр char*. И про размеры буфера тоже он ничего не знает - хотя мог бы, ему же подставили массив известного размера.

Или выяснится что это всё агрессивно работает с динамической памятью, а через год они поменяют интерфейс этой библиотеки. Или вообще она станет deprecated.

А ведь задача то простейшая:

Код: plaintext
1.
bool mb_to_upper(char*, size_t);


Или как-то так.
...
Рейтинг: 0 / 0
MSVC и GCC: совместимость кодировок исходников
    #39895957
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
...
Рейтинг: 0 / 0
MSVC и GCC: совместимость кодировок исходников
    #39895958
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Там тоже нет универальной локали. Там только для 1 варианта.
...
Рейтинг: 0 / 0
MSVC и GCC: совместимость кодировок исходников
    #39895959
petrav
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Кстати! Обратите внимание, что библиотека называет Boost Range 2.0 -- это означает, что библиотеку Range 1.0 они уже похерили. И это нормально для них, завтра ты будешь переписывать свой код потому что выйдет Range 3.0. А может им просто надоест эта библиотека и ты останешься один с её глюками.
...
Рейтинг: 0 / 0
MSVC и GCC: совместимость кодировок исходников
    #39895962
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Мы куда-то не туда свернули. Топик начался с кодировок исходников.

Закончили обсуждением бустов.
...
Рейтинг: 0 / 0
MSVC и GCC: совместимость кодировок исходников
    #39895963
Фотография полудух
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
petrav
Код: plaintext
1.
iterator_range<char*> result=find_last(text,"ll");


есть же string::rfind():
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
#include <iostream>
#include <string>
#include <cstddef>

int main ()
{
  std::string str ("The sixth sick sheik's sixth sheep's sick.");
  std::string key ("sixth");

  std::size_t found = str.rfind(key);
  if (found!=std::string::npos)
    str.replace (found,key.length(),"seventh");

  std::cout << str << '\n';
}
...
Рейтинг: 0 / 0
MSVC и GCC: совместимость кодировок исходников
    #39895964
Фотография полудух
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
как раз это - основная причина того, что на библиотеку забивают
когда в std вышел вариант лучше
...
Рейтинг: 0 / 0
MSVC и GCC: совместимость кодировок исходников
    #39895969
petrav
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
полудух
как раз это - основная причина того, что на библиотеку забивают
когда в std вышел вариант лучше

Там смысл примера из Boost.StringAlgo в том, что потенциально там всё без обращения к динамической памяти.

Пора завязывать обсуждение Бустов :)
...
Рейтинг: 0 / 0
MSVC и GCC: совместимость кодировок исходников
    #39895976
Фотография полудух
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
юзай 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 про него, например, знать не знает...
...
Рейтинг: 0 / 0
MSVC и GCC: совместимость кодировок исходников
    #39895978
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Что там у вас? Свой шаблонизатор?

Я думаю обычный билдер строки сработает еще раз в 10 быстрее.
А функция (s)printf всегда почему-то висела в топе небезопасных функций
по версии всех security отчотов.
...
Рейтинг: 0 / 0
MSVC и GCC: совместимость кодировок исходников
    #39895982
Фотография полудух
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mayton
А функция (s)printf всегда почему-то висела в топе небезопасных функций

потому что stack overflow - самая частая атака на все времена
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
char *p;

# НЕЛЬЗЯ!!!
printf(p);

# МОЖНО:
printf("%s", p);


ты на строковые потоки чтоли всё намекаешь?
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
#include <sstream>
#include <string>
#include <iostream>
 
int main()
{
    std::stringstream stream;
    std::string str{"String"};
    stream << "Some " << str;
    std::cout << stream.str() << "\n"; // Some String
}
...
Рейтинг: 0 / 0
MSVC и GCC: совместимость кодировок исходников
    #39895984
petrav
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mayton
Что там у вас? Свой шаблонизатор?

Я думаю обычный билдер строки сработает еще раз в 10 быстрее.
А функция (s)printf всегда почему-то висела в топе небезопасных функций
по версии всех security отчотов.


boost.format -- замена sprintf. Замена безопасная по следующим аспектам:

- Размер буфера.
- Типы данных.
- Корректность формата.
- Соответствие формата и передаваемых параметров.

Типа безопасный С++ вариант sprintf. Вот это хорошая штука и не замороченная. И мега полезная. И поддерживает utf-8, вроде бы.
...
Рейтинг: 0 / 0
MSVC и GCC: совместимость кодировок исходников
    #39895994
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ты на строковые потоки чтоли всё намекаешь?
Нет я не имею в виду потоки.
Просто движки шаблонов делают не просто замены в тексте.
А обычно формируют некую логику билдера. Возможно
используют циклы внутри (таблица внутри отчота) наподобие
Apache Velocity. И обладают некой логикой языка выражений
(expression language).
...
Рейтинг: 0 / 0
25 сообщений из 409, страница 7 из 17
Форумы / C++ [игнор отключен] [закрыт для гостей] / MSVC и GCC: совместимость кодировок исходников
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]