Русские имена файлов на SD карте
- Войдите на сайт для отправки комментариев
Пт, 25/12/2020 - 09:03
Нужно вывести в UART список файлов и папок на SD карте. Как вывести разобрался. Английские буквы выводит нормально (длинные имена тоже), а вот вместо русских знаки вопросов. Как то это можно победить?
Использую библиотеку SD FAT, Arduino Nano, карта подключена по SPI.
// List files in root directory. if (!dirFile.open("/", O_RDONLY)) { sd.errorHalt("open root failed"); } while (file.openNext(&dirFile, O_RDONLY)) { // Skip hidden files. if ( !file.isHidden()) { file.printName(&Serial); Serial.println(); } file.close(); } dirFile.close();
установить правильную кодировку в терминале
Нет. Дело не в этом. В терминал уже приходят знаки вопросов.
На STM32 в библиотеке от Чана я использовал свой перекодировщик. А тут это не срабатывает.
А SD FAT вообще поддерживает символы, не входящие в ASCII?
Ну и, опять же, откуда уверенность, что именно 866, а не, скажем, utf-8?
А SD FAT вообще поддерживает символы, не входящие в ASCII?
Видимо нет. Поэтому и спрашиваю можно ли что то с этим сделать. Или может какая другая штатная библиотека есть?
Сделать всегда можно - написать свое, что устраивает. Другое дело, стоит ли овчинка выделки.
Стандарт на FAT - имена в кодировке первой половине таблицы аски, длина имени 13 символов (включая расширение) всё остальное извращения от гейтца
Это всё чудесно и прекрасно. Как русские названия с флешки прочитать? Или "средствами Ардуины" это невозможно?
Это всё чудесно и прекрасно. Как русские названия с флешки прочитать? Или "средствами Ардуины" это невозможно?
не называть файлы кириллицей...
Я и в Винде-то стараюсь кириллицу не использовать
не называть файлы кириллицей...
На карте музыка в mp3. Но не все названия на английском.
mr_smit, во-первых, задавая вопрос о библиотеке, не грех бы давать на неё ссылку. Может, кому не лень, у себя бы попробовал (у меня, к сожалению, сейчас sd-карточку тыкать некуда). Судя по коду у Вас библиотека не та, что идёт вместе с IDE.
Во-вторых, ну вот получили Вы в программе имя файла - так посмотрите на него! Выведите эту строку побайтно, "в циферках". Хоть узнаете, что там за кодировка! Или будет понятно, что от имени ничего не осталось. А то перекодирую то, не знаю что.
Ну и в-третьих, про то, что в известных библиотеках поддерживаются имена только в формате 8.3 надеюсь помнните.
Ну и в-третьих, про то, что в известных библиотеках поддерживаются имена только в формате 8.3 надеюсь помнните.
1. https://github.com/greiman/SdFat версия 1.1.4 (потому что со второй версией не компилировалось)
2. Знаки вопроса возвращает сама библиотека (во втором сообщении об этом писал).
3. Длинные имена конкретно в этой библиотеке поддерживаются.
Я всё это уже попробовал и проверил.
И эту картинку с hex ты получил, скопировав текст из терминала?
Нет. Посмотрел сырые данные в COM Port Toolkit
Это не проблема терминала. Проблема в библиотеке. Что она не поддерживает нужную кодировку. В библиотеке от Чана http://elm-chan.org/fsw/ff/00index_e.html в исходниках четко прописано что если кодировка не определена, то возвращать вместо символа - "?". В SD Fat бегло посмотрел, не нашел этого, но скорее всего тоже где то это прописано. Но у Чана есть таблицы кодировок и там можно без проблем использовать русский язык.
Поэтому я изначально и спросил есть ли какие то "правильные" библиотеки в Arduino IDE, чтобы прочитать кириллицу в имени файла на SD карте.
P.S. Добавил FatFs библиотеку. Пишет что только под 32-х битную архитектуру (stm32, esp8266). Попробовал PetitFS библиотеку. Она с длинными именами не хочет работать.
В общем похоже что никак на ардуине этого не сделать.
P.S. Добавил FatFs библиотеку. Пишет что только под 32-х битную архитектуру (stm32, esp8266). Попробовал PetitFS библиотеку. Она с длинными именами не хочет работать.
В общем похоже что никак на ардуине этого не сделать.
Arduino Due вполне себе 32-разрядная. Да и семейства stm32 и esp - тоже имеют поддержку со стороны Arduino IDE, а потому могут рассматриваться как разновидности Arduino.
Так что при необходимости все можно сделать. Другое дело - есть ли необходимость? IMHO практически во всех реальных случаях вполне достаточно ASCII 8.3.
Есть.
Могу ошибаться, но вроде здесь меняет на знак '?'. Файл FatFileLFN.cpp
Есть.
Ну тогда, думаю, Вам в раздел "Ищу исполнителя".
Еще актуально ?
P.S. удалось победить русские имена файлов.
А зачем Ардуине "русские имена файлов"?
Чтоб не заниматься рукоблудием при переименовывании тучи русских файлов, песен например, лежащих на карточке.
Предположу, что и Вам не нравится, когда магнитола в машине выдает крякозябры вместо названия песни.
А какое отношение "магнитола в машине" имеет к Ардуино?
Никакого. Пример с магнитолой был риторическим, чтобы подчеркнуть общее неудовольствие от происходящего.
Если мы читаем с карточки, значит хотим увидеть все, что там есть, и в том виде в котором привыкли видеть.
Если мы пишем на карточку, значит хотим чтобы записанная инфа была понятна как нам, так и Ардуине.
Ваш КЭП )))
Если мы пишем на карточку, значит хотим чтобы записанная инфа была понятна как нам, так и Ардуине.
Ну и пиши понятную ардуино информацию, вместо файлов с русскими именами.
... вместо файлов с русскими именами.
Чем Вам не угодили файлы с русскими именами ?
Мне всем угодили. Это ТВОЙ критерий - понятность ардуине.
Мой критерий - понятность нам и Ардуине.
И Вашему Величеству не понятны собственные файлы, если они не названы по-русски?
Если мы читаем с карточки, значит хотим увидеть все, что там есть, и в том виде в котором привыкли видеть.
Если мы пишем на карточку, значит хотим чтобы записанная инфа была понятна как нам, так и Ардуине.
Отнюдь.
Те файлы, которые хранятся на карточке внутри Ардуины - исключительно ее внутреннее дело, и они не обязаны быть понятны никому кроме самой Ардуины.
Еще раз: МК - не ПК. Он не является универсальным устройством. Он предназначен для выполнения исключительно одной единственной программы - своей прошивки. А эта программа в свою очередь нужна для управления конкретным устройством, а не в качестве универсального обработчика информации. Для этого у МК слишком мало памяти.
И Вашему Величеству не понятны собственные файлы, если они не названы по-русски?
Мне фиолетово, как названы файлы, мое устройство не видело файлов в именах которых была кириллица. Теперь видит, корректно отображает, поэтому я и спросил автора темы - актуален ли еще вопрос.
Отнюдь.
Те файлы, которые хранятся на карточке внутри Ардуины - исключительно ее внутреннее дело, и они не обязаны быть понятны никому кроме самой Ардуины.
Еще раз: МК - не ПК. Он не является универсальным устройством. Он предназначен для выполнения исключительно одной единственной программы - своей прошивки. А эта программа в свою очередь нужна для управления конкретным устройством, а не в качестве универсального обработчика информации. Для этого у МК слишком мало памяти.
Спорное утверждение.
У Ардуины нет своей "карточки" (внутренняя память не в счет), а те карточки, которые вставляют в конкретное устройство (например аудиоплеер), которым рулит Ардуина выполняя свою прошивку, могут содержать имена файлов с русскими именами.
У МК достаточно памяти, чтобы выполнять ту задачу которую задумал автор устройсва, в том числе быть универсальным обработчиком информации. Если это не так, выбирается другой МК. ПК это совокупность МК.
...а те карточки, которые вставляют в конкретное устройство (например аудиоплеер), которым рулит Ардуина выполняя свою прошивку
Но Ардуина - не аудиоплеер, и делать универсальный аудиоплеер на Ардуине бессмысленно, т.к. он по всем параметрам будет уступать заводскому устройству.
Постарайтесь придумать более вменяемый пример.
, могут содержать имена файлов с русскими именами.
Да откуда ж они там возьмутся?
Я могу понять, когда аудиоплеер, управляемый Ардуино, озвучивает что-то вроде говорящих часов или другого разговаривающего робота, но в этом случае набор файлов изначально задается разработчиком и не изменяется в процессе работы.
У МК достаточно памяти, чтобы выполнять ту задачу которую задумал автор устройсва, в том числе быть универсальным обработчиком информации. Если это не так, выбирается другой МК.
Нет, МК выбирается под конкретную задачу, а не так, чтобы хватило на все случаи жизни. И в качестве универсального обработчика информации МК не подходит.
Простой пример: сравним типичные 8-разрядные МК и ПК. У первого производительность порядка 16 млн оп/с и ОЗУ 1-2 кбайта, а у второго - 0.3 млн оп/с и 64 кбайта. МК - универсальный обработчик информации, поэтому при в 50 раз более низкой призводительности у него в те же 50 раз больше памяти - в аккурат по решаемой задаче (быть универсальным обработчиком информации).
ПК это совокупность МК.
Отнюдь. В ПК отдельные узлы (типа клавиатуры) могут быть изготовлены на МК, но ЦП к МК никакого отношения не имеет, - у него другие задачи, другой баланс характеристик и другая архитектура.
Постарайтесь придумать более вменяемый пример.
Вы правда не можете сами придумать пример, где может потребоваться обработка русских имен файлов?
Постарайтесь придумать более вменяемый пример.
Вы правда не можете сами придумать пример, где может потребоваться обработка русских имен файлов?
Не скажу, как Сергей, но я - нет, не могу. Я делаю карточку для Ардуино. Специально для Ардуино. Откуда там взяться кириллическим именам файлов? Я же сам делаю эту карту, зачем мне кириллица??? Я умею говорить на человеческом языке ;)) (это троллинг)
Я очень много лет с компьютерами. Часто по службе исполнял параллельно функции админа. У меня и на компе кириллические имена появились только с приходом UTF и в винду тоже. Иначе можно было убить контрагентов, которые присылали архивы с кодировкой 1251, когда я работал на Линухе постоянно.
Во времена, когда я был ГИП и руководитель проектного отдела (сооружения связи всякие строили) я просто отправлял Заказчиков нахер, если во вложении почты были кириллические имена файлов.
Я могу понять, когда аудиоплеер, управляемый Ардуино, озвучивает что-то вроде говорящих часов или другого разговаривающего робота, но в этом случае набор файлов изначально задается разработчиком и не изменяется в процессе работы.
Мне кажется, я понял почему идет такая полемика.
Разрешите задать Вам наводящий вопрос: - Что Вы называете Ардуино?
... я просто отправлял Заказчиков нахер, если во вложении почты были кириллические имена файлов.
Напомнило.
- Блин, чё делать то ?..
- А я фиг его знает...
- Может в отдел техподдержки позвоним ?
- Неееее, там злой админ сидит.
))))
Вы правда не можете сами придумать пример, где может потребоваться обработка русских имен файлов?
Ну ты не смог, причем уже с нескольких попыток.
Вы правда не можете сами придумать пример, где может потребоваться обработка русских имен файлов?
Ну ты не смог, причем уже с нескольких попыток.
Похоже у вас трудности с обработкой русского текста. Какие попытки вы имеете в виду?
It looks like you are having difficulties with processing Russian text. What attempts do you mean?
P.S. Или вы перепутали ники написанные латиницей?
Это замечательно, только примера я так и не вижу.
Постарайтесь придумать более вменяемый пример.
Вы правда не можете сами придумать пример, где может потребоваться обработка русских имен файлов?
Не могу.
Влад - тоже не может.
rkit, судя по всему, - тоже.
Да и Вы, скорее всего, также не можете, иначе бы не пытались переадресовать вопрос.
PS. В хобби/DIY существует такое направление - создание безусловно бесполезных устройств. Типа: "А вот смотрите, как я еще могу!" Ну, начиная с известной useless box и вплоть до устройства, которое берет из пачки А4 очередной лист, складывает из него бумажный самолетик и запускает.
Вот, мне кажется, то, о чем Вы говорили в сообщении №21, относится именно к этому классу, но Вы, почему-то, упорно пытаетесь доказать его утилитарную полезность.
Разрешите задать Вам наводящий вопрос: - Что Вы называете Ардуино?
Очень смешно, с учетом того, что ты задал вопрос одному из тех старожил форума, которые много работали именно с мощными вариантами Ардуина, на ARM ядре.
----------------
Короче так. Тебе пытаются объяснить, почему среди известных нет библиотеки, которая понимает UTF в именах файлов на SD карте. Можно ли написать? Да. И я и Андриано и Ркит и многие другие - напишут такую за полдня-день, много - два. Заказывай в "Ищу исполнителя", если у кого-то из старожил найдется время и цена заинтересует - напишем. Готовой нет, потому, что нахер никому не нужна. Как-то так.
Вот, мне кажется, то, о чем Вы говорили в сообщении №21, относится именно к этому классу, но Вы, почему-то, упорно пытаетесь доказать его утилитарную полезность.
В сообщении №21 я (SuperXL) спросил автора темы о том, что актуален ли еще вопрос для него про русские имена файлов. В пост-скриптуме я указал, что данный вопрос удалось порешать.
в том сообщении я ничего не пытался доказать, но, я так понимаю, мне посыпались вопросы про необходимость русских имен файлов. Да, аудио плеер наверное один из единственных девайсов которым нужна необходимость умения открывать и отображать названия русских/китайских/итд файлов. У автора темы, судя по скринам, тоже аудио плеер, ну или девайс с такой функцией. На карточке автора, мне так кажется, лежат файлы с песнями (судя по названию), и предназначены отнюдь не для озвучивания каких либо действий или событий.
На счет хобби/DIY я с Вами согласен. Полезность той или иной самоделки выбирает сам автор этой самоделки. Если это новичек, то мигание светодиодом уже достижение по мнению новичка, и да, "Смотрите, у меня получилось !" имеет право на существование. Более опытные товарищи, если они еще не сильно зазвездились (никоим образом это выражение не относится участникам нашей беседы), скажут - "да, молодец, тебе удалось помигать светодиодом и это лучше, чем сидеть за гаражами на "кортах" и с "семками", изучай дальше - это интересно".
...
Очень смешно, с учетом того, что ты задал вопрос одному из тех старожил форума, которые много работали именно с мощными вариантами Ардуина, на ARM ядре.
К сожалению у меня не отображается карма и почет участников, а только дата регистрации. Возможно по этому и был задан наводящий вопрос, чтобы мне понимать почему возникает такая полемика и как-то понимать уровень подготовки человека. Я своим вопросом никоим образом не пытался как-то обидеть/оскорбить/унизить человека с ником andriano да и в принципе всех тут присутствующих.
Короче так. Тебе пытаются объяснить, почему среди известных нет библиотеки, которая понимает UTF в именах файлов на SD карте. Можно ли написать? Да. И я и Андриано и Ркит и многие другие - напишут такую за полдня-день, много - два. Заказывай в "Ищу исполнителя", если у кого-то из старожил найдется время и цена заинтересует - напишем. Готовой нет, потому, что нахер никому не нужна. Как-то так.
Я так понимаю это тоже мне адресовано, т.к. в этой ветке, походу уже "перемешались люди кони".
Если я своими действиями, как-то отбираю Ваш хлеб (ну или "калымы/шабашки") прошу у Вас прощения. К чему я это. Просто Вы, как и andriano, в сообщении №20, предлагаете обратиться в раздел "Ищу исполнителя".
Форум на то и форум, чтоб общаться и делится информацией по интересам. Причем данное утверждение приводили Вы же в далеком 17 году. Позвольте Вас процитировать: "1.Смысл форумов в том, что на них общаются ПО ИНТЕРЕСАМ. А для ответов на вопросы существуют поисковые системы. Неожиданно, да?".
- Есть. о чем я и написал в посте №21. Пруфы в студию, или поверите наслово )) ?
...один из единственных девайсов которым нужна необходимость...
Ограничусь только этой цитатой.
SuperXL, насколько я понимаю, Вы решили для себя проблему аналогичную той, которой интересовался ТС. Если считаете, что Ваше решение может кому-то оказаться полезным и, кроме того, оно оформлено в более или менее законченном виде, разместите его в "Проектах".
Вот лично я, хотя к подобным вещам отношусь с изрядным скепсисом, но опубликовал в проектах http://arduino.ru/forum/proekty/asoled-kompaktnaya-biblioteka-dlya-oled-displeya-128kh64-s-kirillitsei-utf-8 , надо же, кому-то это, судя по отзывам, пригодилось.
Забыли ещё, что в windows utf-16, а в линуксах utf-8 или любая другая по желанию пользователя.
Спасибо за рекомендацию (это не сарказм, это действительно благодарность).
Это не мое решение, это теперь штатная функция библиотеки SdFat от Bill Greiman. Только она выключена по умолчанию.
Для того чтобы ее включить, надо в файле SdFatConfig.h убрать комментарий со строк 37 и 42 и проверить чтобы на конце этих строк стояла 1.