Форум русскоязычного сообщества Ubuntu


За новостями русскоязычного сообщества и Ubuntu в целом можно следить на нашей страничке в Google+

Автор Тема: Какая кодировка имен файлов в Linux?  (Прочитано 3377 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн fierylion

  • Автор темы
  • Любитель
  • *
  • Сообщений: 54
  • fierylion
    • Просмотр профиля
    • www.folio.fierylion.ru
Какая кодировка имен файлов в Linux?
« : 03 Февраль 2012, 09:04:45 »
Суть  такова надо взять строку из файла.
И этой строкой переименовать файл, однако возникают проблемы с кодированием.
Если текст в нутрии файла utf-8 то имя файла под Linux вполне читабельно, однако к строке прибавляется знак квадратика, видимо пробел или еще некий символ. Но он не виден в терминале.

С этим вопрос,  как удалить  пробелы, используя  редактор sed.

Вторая проблема  под  windows  имя файла  становиться не  читабельно.

Отсюда  вопрос,  какую кодировку  нужно использовать  для переименования файлов из скрипта, чтобы  файл  читался в обеих системах.

Оффлайн alexander.pronin

  • Старожил
  • *
  • Сообщений: 2540
    • Просмотр профиля
Re: Какая кодировка имен файлов в Linux?
« Ответ #1 : 03 Февраль 2012, 09:30:53 »
ghex посмотрите что там у Вас находится.
Удалить пробелы
sed 's/ //' file
Cм. man sed.
С utf-8 под windows все читабельно. Проблемы могут быть только в блокноте (он слегка устарел). Хотя говорят в W7 проблему решили.

Оффлайн Дядюшка Ау

  • Участник
  • *
  • Сообщений: 123
  • Дайте две!
    • Просмотр профиля
Re: Какая кодировка имен файлов в Linux?
« Ответ #2 : 03 Февраль 2012, 09:38:32 »
Не так давно на хабре была такая статья. Ща попробую найти..
Ubuntu 12.04 для поколупацца, Win7 для поработать

Оффлайн alecsartania

  • Старожил
  • *
  • Сообщений: 1557
  • УМка.
    • Просмотр профиля
Re: Какая кодировка имен файлов в Linux?
« Ответ #3 : 03 Февраль 2012, 09:49:50 »
"Нечитаемый в винде" - русское имя кракозяблами или просто из-за кракозяблы в конце имени не читается ? А символ в конце  наверно перевод строки - посчитать сколько символовв строке и убрать один или два, не скажу.
#!/bin/bash
Stroka='menN'
varlen=${#Stroka}
echo ${Stroka:0:$varlen-1}
Дома Linux mint 15 ||  Ubuntu 14.04  / Ubuntu 17.03
Работа: Linux Mint 18(Ub 16.04)

andrey_p

  • Гость
Re: Какая кодировка имен файлов в Linux?
« Ответ #4 : 03 Февраль 2012, 10:13:43 »
sed -i 's/.$//' FILE(S)Хотя в репозиторях аж целая программа есть
sudo apt-get install dos2unix
Цитировать
Вторая проблема  под  windows  имя файла  становиться не  читабельно.
Все зависит от того, как файл из Линукса попадает в Винду. В Windows имя файла (длинное) храниться в utf-16, в Linux - в utf-8. Они несовместимы, однако Линукс очень старательно скрывает это, поэтому когда монтируем диск (раздел, флешку и т.п.), то при чтении/записи имена файлов конвертируются автоматически.

Проблема может быть при использовании архиваторов (здесь, на форуме, есть ветка, этому посвящённая), при использовании некошерных ftp-серверов. Может еще, так что давай, посвящай, как ты переносишь.

Оффлайн alecsartania

  • Старожил
  • *
  • Сообщений: 1557
  • УМка.
    • Просмотр профиля
Re: Какая кодировка имен файлов в Linux?
« Ответ #5 : 03 Февраль 2012, 10:24:28 »
думается просто файл с символом перевода строки в конце в названии винда просто отказывается открывать.
Дома Linux mint 15 ||  Ubuntu 14.04  / Ubuntu 17.03
Работа: Linux Mint 18(Ub 16.04)

Оффлайн fierylion

  • Автор темы
  • Любитель
  • *
  • Сообщений: 54
  • fierylion
    • Просмотр профиля
    • www.folio.fierylion.ru
Re: Какая кодировка имен файлов в Linux?
« Ответ #6 : 03 Февраль 2012, 15:31:46 »
Спасибо  что откликнулись  более подробно, так сказать со всем  моим кодом.

В общем, идея довольно  интересная, пригодится всем  кто любит читать, или имеет небольшую или большую библиотеку книг в формате  fb2.  Их теперь развелось много.

Однако имена таких fb2 файлов могут быть не всегда приятными. Ну, например, имя файла на  английском, но  читать нужно по русский, или  к имени файла  приляпали  какой-то номер, или вообще файл назван не  тем именем.  И  вследствие  этого поиск нужной книжки в личной  библиотеке может затягиваться или затруднятся.

Вот я немного подумал, по изучал, этот формат так сказать изнутри, как я и предполагал внутри файла fb2 хранится вся нужная информация, а именно  это Имя и Фамилия автора и названия книги, причем  всегда в правильном русском исполнении. Остаётся эти строки извлечь, форматировать и этой строкой переименовывать собственно сам файл.

Например, таким форматом Светлана Олешкина Игры в кошки мышки.fb2
Ну или вот так Светлана _Олешкина_Игры в кошки мышки.fb2  Ну тут уже каму как нравится.
Это намного читабельней, чем имя файла  подобное этому
002_Svetlana Oliehcina Igri v cohci mihci.fb2
Ну, решил начать с простого сначала извлечь хотя бы имя автора.

Так выглядит  информация внутри файла fb2
(Нажмите, чтобы показать/скрыть)
Мой код:
(Нажмите, чтобы показать/скрыть)

Пробелы кстати так и не удаляются. Потому как в терминале имя выглядит вот так
        Светлана
Подробно 4 пробела, а затем имя  Светлана, и именно так оно переименовывает файл 4 пробела и видимо знак окончания строки, который в терминале не  видим.
Вот я и спрашивал, как  избавиться от всего этого.

И дальше, файл конечно же после выполнения скрипта, файл сменил имя на если смотреть под
Linux,  4 пробела  Светлана далее следует Квадратик, наверное всё-таки знак окончания строки, и .fb2

Под  windows имя файла  ыглядит так  _XC0Q3~M.FB2 , сам файл отрывается, читается с ним всё в порядке.

И еще  файлы  fb2 могут кодироваться, как и веб страници, тем более что язык очень похож, даже не похож, а наверно xml, не только в
  <?xml version="1.0" encoding="utf-8"?>
Но  и <?xml version="1.0" encoding="windows-1251"?>  но эта  кодировка встречается редко.

Тут  видимо стоит искать логическое решение, например, считать  первую строку сравнить с шаблоном, и дальше  ветвиться скрипт.

Вот такие странные проблемы.  Помогите  чем могите……




Оффлайн alecsartania

  • Старожил
  • *
  • Сообщений: 1557
  • УМка.
    • Просмотр профиля
Re: Какая кодировка имен файлов в Linux?
« Ответ #7 : 03 Февраль 2012, 16:16:16 »
а в ручную создаете русское имя на томе - все нормально видится в Win ?
Дома Linux mint 15 ||  Ubuntu 14.04  / Ubuntu 17.03
Работа: Linux Mint 18(Ub 16.04)

Оффлайн alexander.pronin

  • Старожил
  • *
  • Сообщений: 2540
    • Просмотр профиля
Re: Какая кодировка имен файлов в Linux?
« Ответ #8 : 03 Февраль 2012, 16:53:06 »
ТС. Для целей перекодировки xml (например в html) предназначен xslt преобразователь.
Другой вариант - парсить на питоне или php. Здесь тоже неплохо получится.
Но первый вариант предпочтительнее.

Оффлайн Дядюшка Ау

  • Участник
  • *
  • Сообщений: 123
  • Дайте две!
    • Просмотр профиля
Re: Какая кодировка имен файлов в Linux?
« Ответ #9 : 03 Февраль 2012, 16:55:35 »
ТС. Для целей перекодировки xml (например в html) предназначен xslt преобразователь.
Другой вариант - парсить на питоне или php. Здесь тоже неплохо получится.
Но первый вариант предпочтительнее.

Там надо в имя файла. А вообще гугл много выдает по "разбор XML на bash/python"
http://stackoverflow.com/questions/893585/how-to-parse-xml-in-bash вот хотя бы.
Ubuntu 12.04 для поколупацца, Win7 для поработать

Оффлайн fierylion

  • Автор темы
  • Любитель
  • *
  • Сообщений: 54
  • fierylion
    • Просмотр профиля
    • www.folio.fierylion.ru
Re: Какая кодировка имен файлов в Linux?
« Ответ #10 : 03 Февраль 2012, 17:04:06 »
Да,  в ручную созданное русское имя на томе,  нормально видят обе  системы.

 

Страница сгенерирована за 0.057 секунд. Запросов: 24.