|
printf() utf8 + выравнивание по ширине
|
|||
---|---|---|---|
#18+
Неожиданно, но по совершенно понятным причинам, перестало работать выравнивание по ширине. Код: plaintext 1. 2. 3.
На стековерфлоу ( здесь и здесь ) советуют: - Костыли. - Преобразовывать в utf-16. Неужели нет нормального выхода? ... |
|||
:
Нравится:
Не нравится:
|
|||
21.07.2020, 10:49 |
|
printf() utf8 + выравнивание по ширине
|
|||
---|---|---|---|
#18+
Составные символы останутся составными в любой кодировке. Следовательно, то, что вы называете костылями. ... |
|||
:
Нравится:
Не нравится:
|
|||
21.07.2020, 13:35 |
|
printf() utf8 + выравнивание по ширине
|
|||
---|---|---|---|
#18+
Basil A. Sidorov Составные символы останутся составными в любой кодировке. Следовательно, то, что вы называете костылями. Но если мы делаем аля setlocale("utf8"), то printf() мог бы это учитывать? А так да -- wchar_t тут не полное решение. Нам нужно строку и формат преобразовать в UC-32, а после printf_uc32() преобразовывать обратно. ... |
|||
:
Нравится:
Не нравится:
|
|||
21.07.2020, 13:46 |
|
printf() utf8 + выравнивание по ширине
|
|||
---|---|---|---|
#18+
petrav, так прикрути padding пробелов ручками и обрежь через substr! Делов-то... Возможно, в printf пока что неустранённый баг, к которому надо прикрутить workaround. ... |
|||
:
Нравится:
Не нравится:
|
|||
21.07.2020, 13:55 |
|
printf() utf8 + выравнивание по ширине
|
|||
---|---|---|---|
#18+
rdb_dev petrav, так прикрути padding пробелов ручками и обрежь через substr! Делов-то... Возможно, в printf пока что неустранённый баг, к которому надо прикрутить workaround. Код: plaintext 1.
Как вы себе представляете workaround вокруг printf()? ... |
|||
:
Нравится:
Не нравится:
|
|||
21.07.2020, 14:02 |
|
printf() utf8 + выравнивание по ширине
|
|||
---|---|---|---|
#18+
petrav Как вы себе представляете workaround вокруг printf()? Единственная проблема - составные символы, которые могут состоять из двух символов юникода, но выглядеть одним глифом. ... |
|||
:
Нравится:
Не нравится:
|
|||
21.07.2020, 14:11 |
|
printf() utf8 + выравнивание по ширине
|
|||
---|---|---|---|
#18+
rdb_dev petrav Как вы себе представляете workaround вокруг printf()? Единственная проблема - составные символы, которые могут состоять из двух символов юникода, но выглядеть одним глифом. Да, действительно, можно и так. Спасибо. ... |
|||
:
Нравится:
Не нравится:
|
|||
21.07.2020, 14:38 |
|
printf() utf8 + выравнивание по ширине
|
|||
---|---|---|---|
#18+
petrav, попробуй так: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8.
... |
|||
:
Нравится:
Не нравится:
|
|||
21.07.2020, 14:49 |
|
printf() utf8 + выравнивание по ширине
|
|||
---|---|---|---|
#18+
Более корректный вариант: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10.
... |
|||
:
Нравится:
Не нравится:
|
|||
21.07.2020, 15:56 |
|
printf() utf8 + выравнивание по ширине
|
|||
---|---|---|---|
#18+
Это как в БД. Никогда наперед не знаешь сколько вернёт выборка SELECT ... Единственный способ расчитать - это физически вычиать все записи. И посчитать уже по факту. ... |
|||
:
Нравится:
Не нравится:
|
|||
21.07.2020, 17:29 |
|
printf() utf8 + выравнивание по ширине
|
|||
---|---|---|---|
#18+
mayton Это как в БД. Никогда наперед не знаешь сколько вернёт выборка SELECT ... Единственный способ расчитать - это физически вычиать все записи. И посчитать уже по факту. Нет, это как кривые руки. У printf() есть вся эта информация включая локаль. Разве я не прав? ... |
|||
:
Нравится:
Не нравится:
|
|||
21.07.2020, 17:37 |
|
printf() utf8 + выравнивание по ширине
|
|||
---|---|---|---|
#18+
petravРазве я не прав? Может и прав, но толку-то с того? printf не в курсе сколько знакомест на экране займут те байты, которые он посылает консольному драйверу. Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
21.07.2020, 17:42 |
|
printf() utf8 + выравнивание по ширине
|
|||
---|---|---|---|
#18+
petrav mayton Это как в БД. Никогда наперед не знаешь сколько вернёт выборка SELECT ... Единственный способ расчитать - это физически вычиать все записи. И посчитать уже по факту. Нет, это как кривые руки. У printf() есть вся эта информация включая локаль. Разве я не прав? Пресвятые апостолы... Ты всё еще продолжаешь доказывать всем что строка - это массив символов? Вечны болезни. Смерть. Налоги. И желание Петрава иметь random access ко всем буквом строк. К слову. Ты знаешь как работает кернинг при печати True-Type? ... |
|||
:
Нравится:
Не нравится:
|
|||
21.07.2020, 18:14 |
|
printf() utf8 + выравнивание по ширине
|
|||
---|---|---|---|
#18+
mayton petrav пропущено... Нет, это как кривые руки. У printf() есть вся эта информация включая локаль. Разве я не прав? Пресвятые апостолы... Ты всё еще продолжаешь доказывать всем что строка - это массив символов? Вечны болезни. Смерть. Налоги. И желание Петрава иметь random access ко всем буквом строк. Майтун, у нас проблема. В языке программирования С++ после десятков лет развития не работает базовый функционал — printf(). Юзер petrav тут вообще не при делах. mayton К слову. Ты знаешь как работает кернинг при печати True-Type? Без понятия. ... |
|||
:
Нравится:
Не нравится:
|
|||
21.07.2020, 19:31 |
|
printf() utf8 + выравнивание по ширине
|
|||
---|---|---|---|
#18+
Во-первых, printf это чистый С, без плюсов. Во-вторых, он создавался для (и рассчитан на) исключительно текстовых терминалов. В-третьих, UTF-8 это дерьмо, широко распространившееся исключительно благодаря своей хоть какой-то взад совместимости как раз с таким вот наследством, которое о нём вообще не в курсе, поэтому будь благодарен, что оно хоть как-то работает, а не выводит свои "кракозябры" в их естественном виде. Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
21.07.2020, 20:09 |
|
printf() utf8 + выравнивание по ширине
|
|||
---|---|---|---|
#18+
Dimitry Sibiryakov В-третьих, UTF-8 это дерьмо, широко распространившееся исключительно благодаря своей хоть какой-то взад совместимости как раз с таким вот наследством, которое о нём вообще не в курсе, поэтому будь благодарен, что оно хоть как-то работает, а не выводит свои "кракозябры" в их естественном виде. Я считаю, что можно было сделать лучше. А utf очень плохое компромиссное решение. И не должен я благодарить sprintf() — она не представляет ценности. Очень простая функция. PS: Написал я костыль по мотивам совета от rdb_dev. Выравнивание заработало. ... |
|||
:
Нравится:
Не нравится:
|
|||
21.07.2020, 21:22 |
|
printf() utf8 + выравнивание по ширине
|
|||
---|---|---|---|
#18+
petrav mayton пропущено... Пресвятые апостолы... Ты всё еще продолжаешь доказывать всем что строка - это массив символов? Вечны болезни. Смерть. Налоги. И желание Петрава иметь random access ко всем буквом строк. Майтун, у нас проблема. В языке программирования С++ после десятков лет развития не работает базовый функционал — printf(). Юзер petrav тут вообще не при делах. У printf было много проблем. В т.ч. и по линии инфо-безопасности. Но то о чем ты уже несколько топиков рассказываешь не является проблемой в общем понимании этого слова. Вообще в мире open-source принято немедленно обращяться к баг-трекеру и заводить дефект. Где твоё обращение? Где на него реакция? Знаешь ты можешь еще много сотрясать воздух на sql.ru но если ты по настоящему хочешь изменений - пиши куда надо. В комитеты. В репозитарии. В спецификации. Если ты не знаешь как или куда. Спрашивай. Я вряд-ли подскажу т.к. я отошёл от С++ ных дел уж лет 15 как. Но в этом форуме есть люди которые знают. ... |
|||
:
Нравится:
Не нравится:
|
|||
21.07.2020, 22:08 |
|
printf() utf8 + выравнивание по ширине
|
|||
---|---|---|---|
#18+
petrav mayton К слову. Ты знаешь как работает кернинг при печати True-Type? Без понятия. Ну смотри. Чтоб расчитать длину текста в пропорциональном TrueType шрифте есть только один способ. Его надо отпечатать. На реальном устройстве или виртуальном не имеет значения. Кернинг - это плотное заполнение пустых протсранств между символами или глифами символов. Например между буквами "A" и "У" будет один кернинг а между "A" и "Ш" - другой. Ты не можешь заранее знать длину текста в пикселах до тех пор пока его не распечатаешь. Ты не можешь узнать количество строк в SQL выборке пока физически не сделаешь fetch всех data-rows. И односвязный список в функциональном программировании (очень важная и фундаментальная структура) тоже имеет неизвестную длину. Чтоб ее вычислить - нужно его перемотать до конца. Впрочем это отдельная тема. И пудинг нельзя оценить пока его не скушаешь. Вобщем многое в этом мире имеет ограничения. Вот такая вот метафизика. ... |
|||
:
Нравится:
Не нравится:
|
|||
21.07.2020, 22:26 |
|
printf() utf8 + выравнивание по ширине
|
|||
---|---|---|---|
#18+
mayton petrav пропущено... Майтун, у нас проблема. В языке программирования С++ после десятков лет развития не работает базовый функционал — printf(). Юзер petrav тут вообще не при делах. У printf было много проблем. В т.ч. и по линии инфо-безопасности. Но то о чем ты уже несколько топиков рассказываешь не является проблемой в общем понимании этого слова. Для людей на стек-оверфлоу это является проблемой, а для Майтуна не является. :) mayton Где твоё обращение? Где на него реакция? Знаешь ты можешь еще много сотрясать воздух на sql.ru но если ты по настоящему хочешь изменений - пиши куда надо. В комитеты. В репозитарии. В спецификации. Отлично. Я так и сделаю. Прямо завтра напишу в комитет по С++ и в Майкрософт. Скажу что я от Майтуна пришёл. Я задал в этом топике конкретный вопрос, получил ответ, уже реализовал в коде. И тут приходит Майтун и заявляет, что я занимаюсь чем-то не тем. Я тебе чем-то тут мешаю? ... |
|||
:
Нравится:
Не нравится:
|
|||
21.07.2020, 22:27 |
|
printf() utf8 + выравнивание по ширине
|
|||
---|---|---|---|
#18+
Вот ты чудак. Тыж сам мне пишешь. В языке дескать проблема. Не? ... |
|||
:
Нравится:
Не нравится:
|
|||
21.07.2020, 23:04 |
|
printf() utf8 + выравнивание по ширине
|
|||
---|---|---|---|
#18+
petravЯ задал в этом топике конкретный вопрос, получил ответ, уже реализовал в коде. Угу. Реализовал конкретную затычку для конкретного случая. Теперь добавь в свою строку пару суррогатов и ESC-последовательность чтобы оценить тщету всего сущего. Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
22.07.2020, 00:25 |
|
printf() utf8 + выравнивание по ширине
|
|||
---|---|---|---|
#18+
Dimitry Sibiryakov petravЯ задал в этом топике конкретный вопрос, получил ответ, уже реализовал в коде. Угу. Реализовал конкретную затычку для конкретного случая. Теперь добавь в свою строку пару суррогатов и ESC-последовательность чтобы оценить тщету всего сущего. Да я понимаю, что решение не совершенно. Пока оно устраивает. Тратить время на изучение ICU я пока не готов. ... |
|||
:
Нравится:
Не нравится:
|
|||
22.07.2020, 00:30 |
|
printf() utf8 + выравнивание по ширине
|
|||
---|---|---|---|
#18+
Dimitry Sibiryakov Теперь добавь в свою строку пару суррогатов ... |
|||
:
Нравится:
Не нравится:
|
|||
22.07.2020, 03:00 |
|
printf() utf8 + выравнивание по ширине
|
|||
---|---|---|---|
#18+
Basil A. SidorovНадеюсь, UTF-8 не будет обременён "грехами" ANSI-терминала? А куда он денется? Другого-то способа вывода в Си нет. Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
22.07.2020, 12:44 |
|
printf() utf8 + выравнивание по ширине
|
|||
---|---|---|---|
#18+
petrav mayton пропущено... У printf было много проблем. В т.ч. и по линии инфо-безопасности. Но то о чем ты уже несколько топиков рассказываешь не является проблемой в общем понимании этого слова. Для людей на стек-оверфлоу это является проблемой, а для Майтуна не является. :) mayton Где твоё обращение? Где на него реакция? Знаешь ты можешь еще много сотрясать воздух на sql.ru но если ты по настоящему хочешь изменений - пиши куда надо. В комитеты. В репозитарии. В спецификации. Отлично. Я так и сделаю. Прямо завтра напишу в комитет по С++ и в Майкрософт. Скажу что я от Майтуна пришёл. Я задал в этом топике конкретный вопрос, получил ответ, уже реализовал в коде. И тут приходит Майтун и заявляет, что я занимаюсь чем-то не тем. Я тебе чем-то тут мешаю? ... |
|||
:
Нравится:
Не нравится:
|
|||
22.07.2020, 13:56 |
|
|
start [/forum/topic.php?fid=57&msg=39982237&tid=2017376]: |
0ms |
get settings: |
11ms |
get forum list: |
15ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
37ms |
get topic data: |
11ms |
get forum data: |
3ms |
get page messages: |
61ms |
get tp. blocked users: |
1ms |
others: | 15ms |
total: | 162ms |
0 / 0 |