|
225 / 39 / 4
Регистрация: 18.11.2012
Сообщений: 1,633
|
||||||
Вывод информации в файл, Кириллица корректно не выводится23.09.2022, 06:43. Показов 7549. Ответов 81
Метки нет (Все метки)
Здравствуйте! Решил вывести информацию в файл по нажатии на кнопку "сохранить", но в файл отображается либо кракозябры, либо ничего, если текст на русском.
Вот код той части кода, которая должна выполнить задуманное: Кликните здесь для просмотра всего текста
Если честно, то я иссяк и хоть это не так важно на данный момент - я про вывод информации в файл, но, думаю, что лишним подобные знания не будут. В чём мой косяк? По идее должно выводить без проблем. Считывая строку из элемента управления "edit" в каком формате ANSII или UNICODE она попадает в буфер?
0
|
||||||
| 23.09.2022, 06:43 | |
|
Ответы с готовыми решениями:
81
Вывод информации - кириллица и латиница вместе
Ввод вывод в файл и консоль.(Кириллица) |
|
4070 / 2704 / 433
Регистрация: 09.09.2017
Сообщений: 12,023
|
||||||||||||||
| 26.09.2022, 15:36 | ||||||||||||||
|
Впрочем, если хотите, можете привести хотя бы пару языков (кроме C# и подобных, разработанных изначально под винду, разумеется), которые следуют вашему шаблону. Напоминаю: под новые процессоры, контроллеры, ядра и прочее железо первым пишут именно компилятор Си, а вовсе не винду. Более того, ее даже на ARM портировать толком не могут. Полторы архитектуры железа, вот он ваш эталон претендента на стандарт! Так вот, если речь о разных процессах (все равно как если вы запустите несколько раз одновременно один и тот же экзешник), никакого конфликта не будет. А если о потоках, да еще на чистом strtok (без внешней переменной для хранения), уже будут проблемы. Для решения которых эту переменную собственно и ввели. В большинстве случаев об их существовании вы узнаете, когда начнете гуглить какую-нибудь специфичную проблему, а то и просто случайно. Либо при попытках закопаться вглубь системы. А изучать подобные вещи впрок почти бесполезно: их слишком много, без сколь-нибудь существенной практики (по сути - решения практической задачи) вы их толком не изучите, а потом еще и забудете. Поэтому просто занимайтесь тем, что вам интересно, или нужно в жизни и не теряйте любопытства. Я недавно писал GUI для скриптов на языке Lua для автоматизации работы с измерительными приборами. И в качестве виджетов взял именно gtk. Основная система на моей рабочей машине Linux, но проверял и на виндовых виртуалках. Как минимум до winXP вполне работает. При том, что я по сути не знаю ни winapi, ни X11/wayland (это линуксовый аналог winapi, но только для оконной системы, именно поверх него тот же gtk работает). Разумеется, не без косяков, но так это по сути мой первый проект с более-менее нормальным GUI. Да, Замабувараев, я довольно много пишу на Си как под ПК, так и под МК, а вот с гуйней столкнулся впервые. Демки на SDL+OpenGL не в счет, GUI там по сути нет. Большая часть реальных задач гораздо проще решается в консоли или с минимальным использованием графики. И нет, вопрос следования стандартам практически не спорный. Стандарты для того и нужны. А замыкаясь в узкой нише вроде того же winapi, вы серьезно ограничиваете себе как кругозор, так и возможность роста. Отдельно отмечу, что если вы хотите стать именно специалистом по ядру винды, тогда да, надо изучать именно его. Равно как специалист-эмбеддер будет изучать именно архитектуру контроллеров, а программист-трехмерщик возможности видеокарт и устройство графических библиотек. Но из ваших сообщений я могу предположить, что вы только знакомитесь с программированием, и не определились со специализацией. А в таком случае стоит изучить всего понемногу. ![]() Жаль только, винда в юникод за столько лет так толком и не научилась... Такое ощущение, что при написании софта под винду проще сразу писать свои реализации ввода-вывода, чем пытаться допилить те, что есть.
0
|
||||||||||||||
|
225 / 39 / 4
Регистрация: 18.11.2012
Сообщений: 1,633
|
||||||||||
| 27.09.2022, 12:11 [ТС] | ||||||||||
|
Без понятия! Одна и та же строка буде разложена дважды, зачем, производительность?
0
|
||||||||||
|
4070 / 2704 / 433
Регистрация: 09.09.2017
Сообщений: 12,023
|
||||||||||||||||||||||||||||||||||||||||||||
| 27.09.2022, 17:28 | ||||||||||||||||||||||||||||||||||||||||||||
Кстати, когда я подобным образом отображал результаты моделирования для конференции, помимо собственно рисования сделал вывод в кучу bmp'шек, благо формат простой. Помню, в школе нам рассказывали про BorlandPascal, а я на нем делал примитивный графический редактор. Даже картинку какую-то нарисовал... и только потом сообразил, что не написал функцию сохранения.
0
|
||||||||||||||||||||||||||||||||||||||||||||
|
COM‐пропагандист
|
||
| 27.09.2022, 18:36 | ||
|
А вы вынуждены бороться и воевать с этой библиотекой, вставляя костыли. Смех.
0
|
||
|
4070 / 2704 / 433
Регистрация: 09.09.2017
Сообщений: 12,023
|
|||
| 27.09.2022, 20:01 | |||
|
Вот в каком-нибудь Питоне - пожалуйста. Собственно, там даже кодировка динамически выбирается: ascii -> utf-16 -> utf-32 в зависимости от символов в строке.
0
|
|||
|
225 / 39 / 4
Регистрация: 18.11.2012
Сообщений: 1,633
|
||||||
| 28.09.2022, 11:50 [ТС] | ||||||
, спрашиваю, а вы мне про библиотеки, я знаю, что можно, много чего можно, но не нужно мне сейчас про библиотеки я ими не пользуюсь(на данный момент). Серьёзных задач не решаю, проф. программистом не являюсь, хочу вникнуть в то, что сейчас изучаю.![]()
0
|
||||||
|
4070 / 2704 / 433
Регистрация: 09.09.2017
Сообщений: 12,023
|
|||||
| 28.09.2022, 17:19 | |||||
|
0
|
|||||
|
225 / 39 / 4
Регистрация: 18.11.2012
Сообщений: 1,633
|
||||||||||||||||
| 29.09.2022, 06:30 [ТС] | ||||||||||||||||
|
Если всё же, говорить о потоках, то сначала отработать должен один поток, а затем второй, иначе, выдаются неправильные результаты, значит, чтобы два потока отработали параллельно нужно чтобы каждый поток имел свой набор обрабатываемых данных. Кликните здесь для просмотра всего текста
![]() ? Вот такой вопрос:
Смущает формулировка "при любых изменениях размеров окна.", что тут имеется ввиду никак не пойму, возможно, вообще нужно вывести одну строку по диагонали). Тексты бывают разных размеров, как можно изменять размеры окна и при этом текст должен помещаться в окне да ещё и без полос прокрутки, о них тут не слова, хорошо, изменил размер шрифта, но есть предел размера как в большую так и в меньшую сторону. Что делать, как быть... На данный момент я сделал следующее: Кликните здесь для просмотра всего текста
0
|
||||||||||||||||
|
COM‐пропагандист
|
||
| 29.09.2022, 08:38 | ||
|
Стандартная библиотека все эти тонкости должна скрывать и предоставлять единый интерфейс в виде функции print. Вам не надо знать в какие регистры класть указатели на строку и в какой последовательности помещать параметры в стэк. Вам нужно просто вызвать print и стандартная библиотека сделает это за вас. И если формат си‐строк не соответствует родным строкам в ОС, то стандартная библиотека должна их конвертировать, чтобы обеспечить единый интерфейс. Грош цена стандартной библиотеке, которая это не умеет.
0
|
||
|
4070 / 2704 / 433
Регистрация: 09.09.2017
Сообщений: 12,023
|
|||||||||||||||
| 29.09.2022, 10:48 | |||||||||||||||
|
Кликните здесь для просмотра всего текста
Вот для этого последний аргумент и используется - для буферизации входной строки между вызовами. Так что да, это вопрос привычки и собственно задачи. И я вас ни в коем случае не отговариваю что-либо изучать. Напротив, умение собрать хотя бы примитивный GUI на чистом winapi без сторонних библиотек бывает полезно. Но по формулировке могу предположить совершенно практическую расшифровку - чтобы текст всегда помещался в окне и был читаем. То есть разбиение на несколько строчек, в том числе когда вы хватаете окно за угол и начинаете его ресайзить. И скорее всего, в winapi какой-то стандартный способ для этого есть. Изменение размера шрифта вряд ли. Это чит, и я плохо представляю, где бы это пригодилось в реальной жизни. Причем я могу понять и оправдать костыли вроде SetConsoleCP: при наличии нескольких кодировок узнать правильную ему больше неоткуда. Туда же isatty: если вывод идет на терминал, можно узнать его размер, работать с цветами, рисовать псевдографику. Но вот преобразовывать нажатия на клавиатуре в коды символов в заданной кодировке и наоборот, зная кодировку рисовать символы именно в соответствии с ней - задача именно терминала. Кстати, Liss29, тоже интересный пример упражнения - реализация терминала. Ведь как работает эмулятор терминала. Это окно в графическом окружении. Оно умеет обрабатывать нажатия клавиш - букв, цифр, стрелочек, функциональных - и переводить сканкоды в символы заданной кодировки*. Дальше эти символы собираются в строку: мы ведь можем ее редактировать, пока не нажали энтер. Перемещение курсора, делет, бэкспейс, копирование-вставка и все такое. Всем этим занимается именно терминал, а не юзерская программа**. Когда строка сформирована, она передается на stdin юзерской программы. Одновременно с stdout и stderr читается ее вывод и отображается в окне терминала. Плюс терминал может обрабатывать управляющие клавиши вроде ctrl+C, ctrl+Z и подобных. . Придется освоить оконный ввод, и главное - вывод. Редактирование строк (само по себе непросто). Запуск сторонних программ и подмена stdin/stdout/stderr на собственные. Неблокирующий ввод-вывод (пока мы ждем ввода от программы, обработка оконных событий прекращаться не должна). Возможно, кодировки (но явно не приоритет). В общем, довольно сложная задача. . *Первые терминалы, которые были именно терминалами - отдельными устройствами из принтера и клавиатуры и подключавшимися к компьютеру по COM-порту - скорее всего знали только одну кодировку, намертво зашитую в память. Поэтому если бы упражнение по кодингу терминала делал я, на первом этапе ограничился бы единственной кодировкой ASCII или UTF-8 в зависимости от графической библиотеки. Собственно, я точно не знаю, как задать кодировку в современных эмуляторах терминала - в этом просто нет нужды, везде utf-8, в крайнем случае iconv поможет. В виндовом, очевидно, SetConsoleCP и подобные. Можно еще попробовать читать переменную окружения LOCALE, но это уже извращение. ** Есть еще так называемый "неканоничный режим", когда коды передаются непосредственно в юзерскую программу без отображения на экране и ожидания энтера. Тот же _getch() примерно так работает. Но для первой версии оно явно не нужно. Логично решить эту проблему один раз при разработке ОС/терминала, чем раз за разом при написании каждой утилиты.
0
|
|||||||||||||||
|
COM‐пропагандист
|
||
| 29.09.2022, 18:22 | ||
|
0
|
||
|
4070 / 2704 / 433
Регистрация: 09.09.2017
Сообщений: 12,023
|
|||
| 29.09.2022, 18:49 | |||
|
Переменные вроде $LOCALE кто придумал? Для чего их придумали, как думаете?
0
|
|||
|
COM‐пропагандист
|
||
| 30.09.2022, 14:34 | ||
|
0
|
||
|
4070 / 2704 / 433
Регистрация: 09.09.2017
Сообщений: 12,023
|
||
| 30.09.2022, 15:46 | ||
|
Так что ваша претензия на самом деле к разработчикам виндовой консоли, которая стандарты не поддерживает.
0
|
||
|
225 / 39 / 4
Регистрация: 18.11.2012
Сообщений: 1,633
|
||||||
| 01.10.2022, 05:30 [ТС] | ||||||
|
0
|
||||||
|
COM‐пропагандист
|
||
| 01.10.2022, 08:02 | ||
|
Любая строка должна иметь формат и определённое устройство. Это же не какой‐то сырой набор байт, который выводится в поток совершенно другой функцией. Для вывода строк на консоль есть специальные функции, которые работают со строками. Поэтому когда библиотека выводит строку на консоль, она использует функции вывода строки. И строку для таких функций следует подавать в родном для ОС формате, и библиотека должна преобразовать формат си‐строк в родной формат строк для ОС. По факту это уже происходит. Например, функция WriteConsole ориентируется не на нулевой символ, как это принято в си, а на длину, которую указывают отдельным параметром. Стандартная библиотека вычисляет длину строки и отправляет её в функцию WriteConsole. Первый шаг сделан. Осталось сделать второй шаг и научить разработчиков библиотеки, что выводить строки можно в юникоде.
0
|
||
|
4070 / 2704 / 433
Регистрация: 09.09.2017
Сообщений: 12,023
|
||||||||||||||||
| 01.10.2022, 10:50 | ||||||||||||||||
|
Вторая интерпретация, практическая: аналог блокнота, когда фиксированы и ширина, и высота, но можно добавить полосы прокрутки. Третья интерпретация, учебная: фиксированы ширина и высота, но можно менять шрифт так, чтобы текст всегда заполнял все окно. Если же хотите решить задачу "честно", должны быть функции расчета размера реднера строки. В том же gtk есть функция cairo_text_extents(intr, str, &sizes);, которая для строки str, выводимой ранее указанным шрифтом, считает размеры. В SDL подобным занимаются TTF_SizeText, TTF_SizeUTF8 (font, string, &w, &h);. По идее, подобное должно быть и в других шрифтовых библиотеках.Но это низкий уровень. Если ваше упражнение рассчитано на использование стандартных виджетов, надо именно их как-то настраивать. Может, у label есть функция автопереноса, может у поля текстового ввода. Как я говорил раньше, с winapi помочь смогу немногим. Если перенаправить ввод-вывод на обычные файлы, проблем нет. Значит, разработчики про юникод в курсе, и корректно реализовали. Получается, проблема именно в виндовой консоли. Не поленился, проверил на виртуалке с winXP. Кстати, нашел забавный костыль для вайна. Вероятно, он старательно эмулирует баги виндового терминала, но получается это плохо. Но можно вызвать программу так: cat | wine a.exe | cat, тогда ввод-вывод по сути пробрасывается из виндового терминала в нормальный, и проблем с юникодом не возникает.Код примера:
0
|
||||||||||||||||
|
4070 / 2704 / 433
Регистрация: 09.09.2017
Сообщений: 12,023
|
|
| 01.10.2022, 12:49 | |
|
UPD: ого, а в msys2 это работает. Видать, добавили под капотом проверку выходного потока и костыли для обхода багов виндовой консоли.
Замабувараев, видите, сторонние разработчики вынуждены изворачиваться странным образом только чтобы программа в винде работала так, как ожидалось.
0
|
|
|
COM‐пропагандист
|
||||||||
| 01.10.2022, 21:10 | ||||||||
|
Когда взяли нормальную, то всё заработало. Так что проблема не в винде. Добавлено через 7 минут
0
|
||||||||
|
4070 / 2704 / 433
Регистрация: 09.09.2017
Сообщений: 12,023
|
||||
| 01.10.2022, 21:28 | ||||
|
Сколько можно повторять: не перекладывайте работу разработчиков консоли на прикладных программистов. Если бы вы умели читать, то увидели бы пример, который я нашел для wine'а: cat | wine a.exe | cat и про аналог которого спрашивал. Но вы не умеете, поэтому приводите какие-то совершенно левые примеры.
0
|
||||
| 01.10.2022, 21:28 | |
|
Кодировка , кириллица не корректно отображается Не выводится кириллица Не выводится кириллица из БД Не выводится кириллица в консоль Кириллица выводится некорректно Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
Где деньги лежат
kumehtar 02.07.2026
Это - японская подводная лодка I-52 (тип C2, кодовое имя Momi) вышла из Японии в марте 1944 года с миссией в оккупированную немцами Францию (Лорьян). Это была одна из «Янаги»-миссий по обмену. . .
|
Krabik для WoW 3.3.5a, многоязычный
AmbA 02.07.2026
Допилил бота, думаю что окончательно. Изменения:
- добавлена многоязычность
- добавлено снятие скриншотов
- добавлено поддержание бафов хождения по воде (для жреца, дк и шамана)
- и так, по. . .
|
Алиса нашла кучу ошибок компиляции и запуска в проекте, который без проблем компилировался и запускался)))
anaschu 30.06.2026
Я пока посмеюся, но завтра проверю. А вообще интерсно. Дал алисе файл, в котором точно нет ошибок компиляции и запуска, и попросил их найти. Нашла кучу)))
Критические ошибки, мешающие компиляции и. . .
|
сукцессия 16. Общий обзор, в основном что бы другие ии поняли
anaschu 29.06.2026
# Передаточный документ: модель микоризной сукцессии (для нового чата)
Этот документ предназначен для того, чтобы новый чат Claude мог продолжить
работу без необходимости заново разбираться в. . .
|
|
сукцессия 15 неявная схема
anaschu 29.06.2026
Алиса
Калибровка параметров симбиотической модели: технический обзор
Содержание:
Введение
Постановка проблемы
Технические аспекты реализации
Процесс внедрения изменений
|
сукцессия 14. Обновленная схема модели
anaschu 28.06.2026
ГЛОБАЛЬНАЯ ОПИСАТЕЛЬНАЯ СПЕЦИФИКАЦИЯ ЭКОСИСТЕМНОЙ МОДЕЛИ «SOIL CHEMISTRY & MYCORRHIZA 2. 0»
https:/ / ibb. co/ NnkGpfMd
Представленная интегрированная схема описывает непрерывную нелинейную. . .
|
сукцессия 13. Питон модель трехзонного мицелия, пока что в основном арбускулярного
anaschu 28.06.2026
## Разработка агентной модели микоризной сукцессии: от выявления артефактов к созданию комплексной системы
### Аннотация
Представлено исследование по разработке агентной модели микоризной. . .
|
сукцессия 12. краткий список проверок модели перед запуском.
anaschu 27.06.2026
Скрытые отказы в моделях систем динамики (SD-models) экологических систем: два случая из практики
Контекст
Разбирался прототип модели систем динамики (SD-модели) микоризной сукцессии: пять. . .
|