- HowTo: Check and Change File Encoding In Linux
- Check a File’s Encoding
- Change a File’s Encoding
- List All Charsets
- 8 Replies to “HowTo: Check and Change File Encoding In Linux”
- LinuxSoID
- понедельник, 2 февраля 2009 г.
- Преобразование кодировки имени файла
- unixforum.org
- [таки решено] Кракозябра в именах файлов
- [таки решено] Кракозябра в именах файлов
- Re: [таки решено] Кракозябра в именах файлов
- Re: [таки решено] Кракозябра в именах файлов
- Re: [таки решено] Кракозябра в именах файлов
- Re: [таки решено] Кракозябра в именах файлов
- Re: [таки решено] Кракозябра в именах файлов
- Re: [таки решено] Кракозябра в именах файлов
- Re: [таки решено] Кракозябра в именах файлов
- Re: [таки решено] Кракозябра в именах файлов
- Re: [таки решено] Кракозябра в именах файлов
- Re: [таки решено] Кракозябра в именах файлов
- Re: [таки решено] Кракозябра в именах файлов
- Re: [таки решено] Кракозябра в именах файлов
- Re: [таки решено] Кракозябра в именах файлов
- Re: [таки решено] Кракозябра в именах файлов
- Re: [таки решено] Кракозябра в именах файлов
- Re: [таки решено] Кракозябра в именах файлов
- Re: [таки решено] Кракозябра в именах файлов
- Re: [таки решено] Кракозябра в именах файлов
- Re: [таки решено] Кракозябра в именах файлов
- Re: [таки решено] Кракозябра в именах файлов
- Re: [таки решено] Кракозябра в именах файлов
- Re: [таки решено] Кракозябра в именах файлов
- Re: [таки решено] Кракозябра в именах файлов
- Re: [таки решено] Кракозябра в именах файлов
- Re: [таки решено] Кракозябра в именах файлов
- Re: [таки решено] Кракозябра в именах файлов
- Re: [таки решено] Кракозябра в именах файлов
- Re: [таки решено] Кракозябра в именах файлов
- Re: [таки решено] Кракозябра в именах файлов
HowTo: Check and Change File Encoding In Linux
The Linux administrators that work with web hosting know how is it important to keep correct character encoding of the html documents.
From the following article you’ll learn how to check a file’s encoding from the command-line in Linux.
You will also find the best solution to convert text files between different charsets.
I’ll also show the most common examples of how to convert a file’s encoding between CP1251 (Windows-1251, Cyrillic), UTF-8 , ISO-8859-1 and ASCII charsets.
Cool Tip: Want see your native language in the Linux terminal? Simply change locale! Read more →
Check a File’s Encoding
Use the following command to check what encoding is used in a file:
Option | Description |
---|---|
-b , —brief | Don’t print filename (brief mode) |
-i , —mime | Print filetype and encoding |
Check the encoding of the file in.txt :
Change a File’s Encoding
Use the following command to change the encoding of a file:
Option | Description |
---|---|
-f , —from-code | Convert a file’s encoding from charset |
-t , —to-code | Convert a file’s encoding to charset |
-o , —output | Specify output file (instead of stdout) |
Change a file’s encoding from CP1251 (Windows-1251, Cyrillic) charset to UTF-8 :
Change a file’s encoding from ISO-8859-1 charset to and save it to out.txt :
Change a file’s encoding from ASCII to UTF-8 :
Change a file’s encoding from UTF-8 charset to ASCII :
Illegal input sequence at position: As UTF-8 can contain characters that can’t be encoded with ASCII, the iconv will generate the error message “illegal input sequence at position” unless you tell it to strip all non-ASCII characters using the -c option.
Option | Description |
---|---|
-c | Omit invalid characters from the output |
You can lose characters: Note that if you use the iconv with the -c option, nonconvertible characters will be lost.
This concerns in particular Windows machines with Cyrillic.
You have copied some file from Windows to Linux, but when you open it in Linux, you see “Êàêèå-òî êðàêîçÿáðû” – WTF!?
Don’t panic – such strings can be easily converted from CP1251 (Windows-1251, Cyrillic) charset to UTF-8 with:
List All Charsets
List all the known charsets in your Linux system:
Option | Description |
---|---|
-l , —list | List known charsets |
8 Replies to “HowTo: Check and Change File Encoding In Linux”
Thank you very much. Your reciept helped a lot!
I am running Linux Mint 18.1 with Cinnamon 3.2. I had some Czech characters in file names (e.g: Pešek.m4a). The š appeared as a ? and the filename included a warning about invalid encoding. I used convmv to convert the filenames (from iso-8859-1) to utf-8, but the š now appears as a different character (a square with 009A in it. I tried the file command you recommended, and got the answer that the charset was binary. How do I solve this? I would like to have the filenames include the correct utf-8 characters.
Thanks for your help–
Вообще-то есть 2 утилиты для определения кодировки. Первая этo file. Она хорошо определяет тип файла и юникодовские кодировки… А вот с ASCII кодировками глючит. Например все они выдаются как буд-то они iso-8859-1. Но это не так. Тут надо воспользоваться другой утилитой enca. Она в отличие от file очень хорошо работает с ASCII кодировками. Я не знаю такой утилиты, чтобы она одновременно хорошо работала и с ASCII и с юникодом… Но можно совместить их, написав свою. Это да. Кстати еnca может и перекодировать. Но я вам этого не советую. Потому что лучше всего это iconv. Он отлично работает со всеми типами кодировок и даже намного больше, с различными вариациями, включая BCD кодировки типа EBCDIC(это кодировки 70-80 годов, ещё до ДОСа…) Хотя тех систем давно нет, а файлов полно… Я не знаю ничего лучше для перекодировки чем iconv. Я думаю всё таки что file не определяет ASCII кодировки потому что не зарегистрированы соответствующие mime-types для этих кодировок… Это плохо. Потому что лучшие кодировки это ASCII.
Для этого есть много причин. И я не знаю ни одной разумной почему надо пользоваться юникодовскими кроме фразы “США так решило…” И навязывают всем их, особенно эту utf-8. Это худшее для кодирования текста что когда либо было! А главная причина чтобы не пользоваться utf-8, а пользоваться ASCII это то, что пользоваться чем-то иным никогда не имеет смысла. Даже в вебе. Хотите значки? Используйте символьные шрифты, их полно. Не вижу проблем… Почему я должен делать для корейцев, арабов или китайцев? Не хочу. Мне всегда хватало русского, в крайнем случае английского. Зачем мне ихние поганые языки и кодировки? Теперь про ASCII. KOI8-R это вычурная кодировка. Там русские буквы идут не по порядку. Нормальных только 2: это CP1251 и DOS866. В зависимости от того для чего. Если для графики, то безусловно CP1251. А если для полноценной псевдографики, то лучше DOS866 не придумали. Они не идеальны, но почти… Плохость utf-8 для русских текстов ещё и в том, что там каждая буква занимает 2 байта. Там ещё такая фишка как во всех юникодах это indian… Это то, в каком порядке идут байты, вначале младший а потом старший(как в памяти по адресам, или буквы в словах при написании) или наоборот, как разряды в числе, вначале старшие а потом младшие. А если символ 3-х, 4-х и боле байтов(до 16-ти в utf-8) то там кол-во заморочек растёт в геометрической прогрессии! Он ещё и тормозит, ибо каждый раз надо вычислять длину символа по довольно сложному алгоритму! А ведь нам ничего этого не надо! Причём заметьте, ихние англицкие буквы идут по порядку, ничего не пропущено и все помещаются в 1-м байте… Т.е. это искусственно придуманые штуки не для избранных америкосов. Их это вообще не волнует. Они разом обошли все проблемы записав свой алфавит в начало таблицы! Но кто им дал такое право? А все остальные загнали куда подальше… Особенно китайцев! Но если использовать CP1251, то она работает очень быстро, без тормозов и заморочек! Так же как и английские буквы…
а вот дальше бардак. Правда сейчас нам приходится пользоваться этим utf-8, Нет систем в которых бы системная кодировка была бы ASCII. Уже перестали делать. И все файлы системные именно в uft-8. А если ты хочешь ASCII, то тебе придётся всё время перекодировать. Раньше так не надо было делать. Надеюсь наши всё же сделают свою систему без ихних штатовких костылей…
Уважаемый Анатолий, огромнейшее Вам спасибо за упоминание enca. очень помогла она мне сегодня. Хотя пост Ваш рассистский и странный, но, видимо, сильно наболело.
Источник
LinuxSoID
Интересные и полезные заметки связанные с ОС Linux
понедельник, 2 февраля 2009 г.
Преобразование кодировки имени файла
Часто бывает, что в системе остаются такие артефакты, как файлы,
имя которых записано в кодировке koi8-r или cp1251.
Обычно такое случается, когда раздел или устройство с которого были скопированы файлы, были смонтированы без указания кодировки, или с указанием неверной кодировки.
Выглядит все это вот так:
# ls
. 1 . 3
Чтобы легко и просто переделать имя файла в читабельный вид, можно воспользоваться утилитой convmv.
Если у вас имена файлов в кодировке koi8-r, то перекодировать их можно так:
convmv -t koi8-r -f utf8 * — выведет список файлов в старой и в новой кодировках:
# convmv -f koi8-r -t utf8 *
Starting a dry run without changes.
mv «./����1» «./Файл1»
mv «./����3» «./Файл3»
И если вас это устраивает, добавляем опцию —notest и программа уже реально переименует файлы:
convmv -f koi8-r -t utf8 —notest *
Convmv поддерживает также кучу дополнительных полезных опций:
—list Покажет список поддерживаемых кодировок.
-r Рекурсивно обойти каталоги.
-i Спрашивать о каждом действии (интерактивный режим).
—lower Переделывает имя файла в нижний регистр
convmv -r -f koi8-r -t utf-8 —notest
Каждому пользователю, в домашнем каталоге которого утилита convmv переименовала хотя бы один файл, был автоматически выслан журнал переименований.
При необходимости можно выполнить обратное преобразование:
convmv -r -f utf-8 -t koi8-r
После проверки вывода команды повторить с ключем —notest. Ключ -r включает рекурсивный обход каталогов.
Переходим в папку с файлами/папками с отличной от системной кодировкой, затем выполняем:
% convmv -f cp1251 -t utf-8 ./
Конвертируем имена из cp1251 в utf-8, вывод этой команды покажет новое имя файла/папки, но не будет переименовывать, если новое имя правильное, то запустим эту же команду с опцией —notest.
Для рекурсивного переименования запускаем convmv с опцией -r.
(Замените koi8-r кодировкой, с которой хотите конвертировать)
# convmv -f koi8-r -t utf-8 filename
Вот пример конвертирования в папке рекурсивно:
convmv -f koi8-r -t utf-8 ./Music —notest -r
Источник
unixforum.org
Форум для пользователей UNIX-подобных систем
- Темы без ответов
- Активные темы
- Поиск
- Статус форума
[таки решено] Кракозябра в именах файлов
Модератор: Bizdelnick
[таки решено] Кракозябра в именах файлов
Сообщение Valodick » 10.08.2009 20:10
Прошу прощения за часто задаваемый и глупый вопрос, просто не нашел ответа.
сходил к другу за музыкой, прихватив с собой винт.
скинул все, дома имена файлов пишутся через кракозябры.
локаль стоит UTF-8
собственно, требуется безболезненно перевести имена файлов в юникод, или же как-нибудь включить распознавание кодировки, в которой записаны имена, не выключая притом юникод.
у друга Windows XP Professional SP3, у меня, соответсвенно, убунта, де — xfce
Re: [таки решено] Кракозябра в именах файлов
Сообщение allez » 10.08.2009 20:17
Re: [таки решено] Кракозябра в именах файлов
Сообщение Valodick » 10.08.2009 21:17
системная локаль UTF-8.ru_RU или что-то в этом роде, знаю точно, бо с alternate cd ставил
и еще.
Декодер Студии Артема Лебедева прекрасно перевел и сообщил следующее:
Как нам пришлось помучиться
Re: [таки решено] Кракозябра в именах файлов
Сообщение uptime » 10.08.2009 21:21
Из сообщения понятно, что скрипту не очень нравиться установленная версия перл. Но он готов попробовать перекодировать и так. Для этого его нужно запустить с опцией —notest.
Re: [таки решено] Кракозябра в именах файлов
Сообщение Valodick » 10.08.2009 21:31
Re: [таки решено] Кракозябра в именах файлов
Сообщение t.t » 11.08.2009 13:40
Re: [таки решено] Кракозябра в именах файлов
Сообщение uptime » 11.08.2009 13:51
может, всё-таки перл обновить?
Re: [таки решено] Кракозябра в именах файлов
Сообщение Voral » 11.08.2009 14:34
чет я не догоняю. А зачем вообще перекодировать то?
Имхо тут надо:
1. Проверить параметры монтирования этого винта (явно ж там нтфс или фат)
2. Возможно проблема с настройками. У меня действительно были проблемы с некоторыми именами файлов на русском. Все решилось в в этом топике
Если коротко:
— выполнил dpkg-reconfigure locales и поставил UTF8 ru
— выполнил dpkg-reconfigure console-cyrillic
— Перегрузился.
Re: [таки решено] Кракозябра в именах файлов
Сообщение Valodick » 11.08.2009 14:38
Voral, сейчас будет)
Re: [таки решено] Кракозябра в именах файлов
Сообщение diesel » 11.08.2009 14:39
Re: [таки решено] Кракозябра в именах файлов
Сообщение Valodick » 11.08.2009 14:44
Re: [таки решено] Кракозябра в именах файлов
Сообщение eddy » 11.08.2009 14:48
Re: [таки решено] Кракозябра в именах файлов
Сообщение Valodick » 11.08.2009 14:51
Re: [таки решено] Кракозябра в именах файлов
Сообщение eddy » 11.08.2009 15:09
Re: [таки решено] Кракозябра в именах файлов
Сообщение Valodick » 11.08.2009 15:11
учиться никогда не поздно
конечно мооожно делать все вручную, копируя имена файлов на сайт артемия лебедева, но хотелось бы таки более изящный вариант)
Re: [таки решено] Кракозябра в именах файлов
Сообщение Voral » 11.08.2009 15:21
говорю на вскидку. Мож и глупость скажу — не обдумывал.
Т.е вы копировали под линуксом, но (вероятно) смонтировано было не корректно (упущен параметр). Т.е. система считывала файл с именем в win1251 при этом его считала в кодирвке А (но не win1251). «Приводила» имя к вашей кодировке. т.е. в итге получилось фиг знает какое преобразование.
Т.е. преобразовывать cp866 -> utf8 не совсем то, что нужно. Надо знать, что подразумевалось под кодировкой A.
Re: [таки решено] Кракозябра в именах файлов
Сообщение eddy » 11.08.2009 15:40
Re: [таки решено] Кракозябра в именах файлов
Сообщение Valodick » 11.08.2009 15:52
говорю на вскидку. Мож и глупость скажу — не обдумывал.
Т.е вы копировали под линуксом, но (вероятно) смонтировано было не корректно (упущен параметр). Т.е. система считывала файл с именем в win1251 при этом его считала в кодирвке А (но не win1251). «Приводила» имя к вашей кодировке. т.е. в итге получилось фиг знает какое преобразование.
Т.е. преобразовывать cp866 -> utf8 не совсем то, что нужно. Надо знать, что подразумевалось под кодировкой A.
Re: [таки решено] Кракозябра в именах файлов
Сообщение diesel » 11.08.2009 15:57
а конвертирование как для зип-файлов не подойдет? попробуйте выполнить
ls | iconv -f iso8859-1 -t cp850 | iconv -f cp866 -t utf8
ls | iconv -f iso8859-1 -t cp850 | iconv -f cp1251 -t utf8
Re: [таки решено] Кракозябра в именах файлов
Сообщение sirocco » 11.08.2009 16:17
Re: [таки решено] Кракозябра в именах файлов
Сообщение eddy » 11.08.2009 16:26
Re: [таки решено] Кракозябра в именах файлов
Сообщение sirocco » 11.08.2009 16:38
Re: [таки решено] Кракозябра в именах файлов
Сообщение eddy » 11.08.2009 16:45
Re: [таки решено] Кракозябра в именах файлов
Сообщение t.t » 12.08.2009 22:06
а конвертирование как для зип-файлов не подойдет? попробуйте выполнить
ls | iconv -f iso8859-1 -t cp850 | iconv -f cp866 -t utf8
ls | iconv -f iso8859-1 -t cp850 | iconv -f cp1251 -t utf8
Re: [таки решено] Кракозябра в именах файлов
Сообщение diesel » 13.08.2009 14:03
а конвертирование как для зип-файлов не подойдет? попробуйте выполнить
ls | iconv -f iso8859-1 -t cp850 | iconv -f cp866 -t utf8
ls | iconv -f iso8859-1 -t cp850 | iconv -f cp1251 -t utf8
Re: [таки решено] Кракозябра в именах файлов
Сообщение t.t » 13.08.2009 19:12
У автора темы один из дистров — убунта. В ней есть точно: http://packages.ubuntu.com/enca
Что проект «мёртв» в смысле «не развивается» — это да. Но ты ведь знаешь, что в юниксах часто не развивается не то, что никому не нужно, а наоборот — то, что уже и так хорошо работает. По моему опыту, это — как раз тот случай.
Re: [таки решено] Кракозябра в именах файлов
Сообщение eddy » 14.08.2009 09:08
Re: [таки решено] Кракозябра в именах файлов
Сообщение Valodick » 18.08.2009 01:36
Re: [таки решено] Кракозябра в именах файлов
Сообщение Valodick » 18.08.2009 19:03
Re: [таки решено] Кракозябра в именах файлов
Сообщение Voral » 18.08.2009 19:27
Помнится приходли мне как то письма в крякозяберном формате (и при этом установка кодировки письма не помогала).
Я копировал это письмо в буфер обмена, вставлял в фаре в редактор и щелкал различные кодировки. При этом игрался как с кодировкой письма в почтовике, так и в редакторе на момент вставки. Прокатило. Но там вариантов не особо много было В прочем и в твоем они достаточно четко могут быть установлены:
1 Кодировка как на диске с ntfs (или fat)
2 кодировка за какую кодировку принял линукс кодировку на том нтфс
3 твоя кодировка в линуксе
Играть нужно только с ними. Можно попробовать скинуть список файлов в текстовый файл и попробовать работать как с текстом.
ИМХО стандартный метод тут не прокатит.
Второй метод. Если речь идет о музыке. Вероятно в нутрях файла есть инфа о названии исполнителя, альбома, песни. Может есть возможность вытащить это от туда и переименовать соответственно файл. Тут я слишком чайник что б занть как в линуксе это сделать. Но может кто подскажет?
Источник