- Конвертирование файлов в кодировку UTF-8 в Linux
- Конвертирование файлов из UTF-8 в ASCII
- Конвертирование нескольких файлов в кодировку UTF-8
- 7.10. Настройка консоли Linux
- Замечание
- Как сменить locale в Debian или пишем кириллицей в консоли linux
- Как включить поддержку UTF-8 в консоли Linux?
- Utf-8 linux console
- Contents
- A Quick Look at Using UTF-8 in the Linux Console (without X)
- The Console
- LANG environment variable
- Fonts
- Keyboard
- Conclusion
Конвертирование файлов в кодировку UTF-8 в Linux
Оригинал: How to Convert Files to UTF-8 Encoding in Linux
Автор: Aaron Kili
Дата публикации: 2 ноября 2016 года
Перевод: А. Кривошей
Дата перевода: ноябрь 2017 г.
В этом руководстве мы рассмотрим кодировки символов и разберем несколько примеров преобразования файлов из одной кодировки в другую с помощью утилиты командной строки. Затем мы покажем, как преобразовать файлы в Linux из любой кодировки (charset) в UTF-8.
Как вы, наверное, уже знаете, компьютер не понимает и не хранит информацию в виде букв, цифр или чего-либо еще. Он работает только с битами. Бит имеет только два возможных значения — 0 или 1, true или false, да или нет. Все остальное кодируется последовательностями битов.
Простыми словами, кодировка символов — это способ кодировки различных символов определенными последовательностями нулей и единиц. Когда мы вводим текст и сохраняем его в файл, слова и предложения, которые мы набираем, состоят из разных символов, а символы преобразуются в биты с помощью кодировки.
Существуют различные схемы кодирования, такие как ASCII, ANSI, Unicode и другие. Ниже приведен пример кодировки ASCII.
В Linux для преобразования текста из одной кодировки в другую используется утилита командной строки iconv.
Вы можете проверить кодировку файла с помощью команды file, используя флаг -i или -mime, который печатает строку типа mime, как в приведенных ниже примерах:
Синтаксис команды iconv следующий:
Где -f или —from-code задает входную кодировку, а -t или —to-encoding задает конечную кодировку.
Для того, чтобы вывести список всех доступных опций, введите:
Конвертирование файлов из UTF-8 в ASCII
Далее мы научимся конвертировать текст из одной кодировки в другую. Приведенная ниже команда преобразует текст из ISO-8859-1 в кодировку UTF-8.
Рассмотрим файл input.file, который содержит следующие символы:
(Прим: вы увидите эти символы на снимке ниже)
Начнем с проверки кодировки файла, затем просмотрим его содержимое. Мы можем преобразовать все символы в кодировку ASCII.
После запуска команды iconv мы затем проверяем содержимое выходного файла и новую кодировку, как показано ниже.
Примечание. Если в команду добавлена строка //IGNORE, то символы, которые не могут быть преобразованы, и ошибка выводятся после преобразования.
Далее, если добавлена строка //TRANSLIT, как в приведенном выше примере (ASCII//TRANSLIT), преобразуемые символы при необходимости и по возможности транслитерируются. Это означает, что если символ не может быть представлен в целевой кодировке, его можно аппроксимировать одним или несколькими похожими символами.
Далее, любой символ, который не может быть транслитерирован и которого нет в целевой кодировке, заменяется в выводе вопросительным знаком (?).
Конвертирование нескольких файлов в кодировку UTF-8
Возвращаясь к основной теме нашей статьи, мы можем написать небольшой скрипт для преобразования нескольких или всех файлов в каталоге в кодировку UTF-8, под названием encoding.sh:
Сохраните этот файл и сделайте скрипт исполняемым. Запускайте его из той директории, где расположены ваши файлы.
Важное замечание. Вы также можете также использовать этот скрипт для преобразования нескольких файлов из одной заданной кодировки в другую (любую), просто меняйте со значения переменных FROM_ENCODING и TO_ENCODING, не забывая об имени выходного файла «$
Для получения дополнительной информации почитайте руководство iconv:
Подводя итог этой статье, необходимо отметить, что понимание способов преобразования текста из одной кодировки в другую — это знания, необходимые каждому пользователю компьютера, а тем более программистам, когда дело касается работы с текстами.
Если вы хотите лучше понять проблему кодировок символов, прочитайте следующие статьи:
Источник
7.10. Настройка консоли Linux
Эта секция описывает настройку скрипта console , который устанавливает раскладку клавиатуры, шрифт консоли и уровень подробности информации, выводимой ядром на консоль. Если Вы не планируете использовать символы, не соответствующие стандарту ASCII (например, знак копирайта, символы фунта и евро), и собираетесь печатать только в английской раскладке, то можете пропустить большую часть секции. Без файла конфигурации (или эквивалентных настроек в rc.site ), скрипт console не будет ничего делать.
Скрипт console считывает конфигурацию из файла /etc/sysconfig/console . Решите для себя, какую раскладку клавиатуры и какой шрифт намерены использовать. Различные HOWTO для многих языков можно найти здесь: http://www.tldp.org/HOWTO/HOWTO-INDEX/other-lang.html. Если Вы все еще в сомнениях, посмотрите список доступных раскладок и шрифтов в директории /lib/kbd . Прочтите страницы руководства loadkeys(1) и setfont(8) , чтобы узнать необходимые аргументы для этих программ.
Файл /etc/sysconfig/console должен содержать строки в формате ПЕРЕМЕННАЯ=»значение». Допустимы следующие переменные:
Эта переменная задает уровень подробности сообщений, посылаемых ядром на системную консоль. Значение этой переменной передается в качестве аргумента утилите dmesg . Допустимы уровни от «1» (нет сообщений) до «8». По умолчанию «7».
Указывает аргументы для программы loadkeys , обычно имя раскладки, например, � es �. Если эта переменная не установлена, загрузочные скрипты не запустят loadkeys и будет использоваться раскладка по умолчанию.
Эта (крайне редко используемая) переменная задает аргументы для второго вызова программы loadkeys . Она полезна, если стандартная раскладка Вас не совсем удовлетворяет и Вы хотите немного ее подправить. Например, чтобы добавить символ евро в раскладку, которая его не содержит, присвойте этой переменной значение � euro2 �.
Задает аргументы для утилиты setfont . Обычно, она включает имя шрифта, � -m � и затем имя карты символов. Например, чтобы загрузить шрифт � lat1-16 � вместе с картой символов � 8859-1 � (неплохой вариант для США), присвойте переменной значение � lat1-16 -m 8859-1 �. В режиме UTF-8, ядро использует карту символов для преобразования 8-битных кодов нажатых клавиш из раскладке в UTF-8 и аргумент параметра «-m» должен указывать кодировку кодов клавиш в раскладке.
Присвойте этой переменной значение � 1 �, � yes � или � true �, чтобы переключить консоль в режим UTF-8. Это полезно при использовании локали, основанной на UTF-8, и не рекомендуется в иных случаях.
Для многих раскладок клавиатуры в пакете Kbd не существует готового Unicode-варианта. Скрипт console будет на лету конвертировать имеющуюся раскладку в UTF-8, если привоить этой переменной имя доступной не-UTF-8 раскладки.
Для не-Unicode настройки необходимы только переменные KEYMAP и FONT. Например, для польских пользователей может подойти такой вариант:
Как упоминалось выше, иногда бывает необходимо подкорректировать раскладку. Следующий пример добавляет символ евро к немецкой раскладке:
Следующий пример — Болгарский язык в режиме Unicode, поскольку для этого языка существует UTF-8 раскладка:
Из-за использования 512-символьного шрифта LatArCyrHeb-16 в предыдущем примере, Вы не сможете использовать яркие цвета в консоли Linux без применения буфера кадров. Если Вы хотите использовать яркие цвета без буфера кадров и готовы прожить без символов, не относящихся к Вашему языку, Вы можете использовать специфичный для вашего языка 256-символьный шрифт, как показано ниже:
Следующий пример демонстрирует автоматическое преобразование раскладки из ISO-8859-15 в UTF-8 и включает «мертвые» клавиши в режиме Unicode:
Некоторые раскладки включают в себя «мертвые» клавиши (то есть клавиши, нажатие которых само по себе не приводит к появлению на экране символа, но которые влияют на символ, генерируемый следующей клавишей) или определяют слияние символов (например: � нажмите Ctrl+. A E, чтобы получить � � в раскладке по умолчанию). Linux-3.8.1 правильно интерпретирует «мертвые» клавиши и слияния, только когда исходные символы имеют 8-битные коды. Эта особенность не влияет на раскладки для европейских языков, поскольку в них «сливаются» два ASCII-символа или добавляются подчеркивания к неподчеркнутым ASCII-символам. Однако, в режиме UTF-8 могут быть проблемы, например, для греческого языка, когда необходимо подчеркнуть символ � alpha �. Решением в этой ситуации будет отказ от использования UTF-8 или установка графической системы X Window, не имеющих подобных ограничений.
Для китайского, японского, корейского и некоторых других языков невозможно насторить консоль Linux так, чтобы она отображала все необходимые символы. Пользователи, которым требуются эти языки, должны установить систему X Window, шрифты, покрывающие необходимый диапазон символов, и правильный метод ввода (например, SCIM, он поддерживает большое число разнообразных языков).
Замечание
Файл /etc/sysconfig/console управляет только локализацией текстовой консоли Linux. Он никак не влияет на настройки раскладки клавиатуры и шрифтов в системе X Window, в сессиях SSH или на последовательном терминале. В этих ситуациях ограничения, описанные в двух расположенных выше абзацах, не применяются.
Источник
Как сменить locale в Debian или пишем кириллицей в консоли linux
Я знаю что кириллица в логах Linux – это самый страшный грех для айтишника, но иногда это просто необходимость. Одна из таких необходимостей возникает при создании централизованного хранения log-файлов различных операционных систем. Microsoft всегда в своих log`ах применяет кириллицу и поэтому если мы хотим получать log-файлы и от Win-серверов, то стоит смириться, что в log`ах будет кирилица.
Для того, чтобы эти логи нормально отображались нам и нужно явно указать locale в Debian, Ubuntu или какой Linux-дистрибутив Вы используете.
Проблемы отображения кириллических символов в Linux не существует. Есть проблема у русской версии Windows. Весь мир и Linux в том числе, работает в кодировке UTF -8, когда русская версия Microsoft использует CP1251. Такая ситуация сложилось исторически благодаря компании «Парус», которая взяла на себя обязательства по локализации всех операционных систем Windows. Выбрали они почему-то кодировку CP1251, которая применяется до сих пор. Использование этой «неправильной» кодировки в наши дни обусловлено сохранением совместимости всех версий ОС.
Чтобы добавить кириллицу, чтобы Linux сервер нормально отображал русские буквы, нужно объяснить ему, что необходимо работать в той же кодировке, что и Windows.
Для того, чтобы управлять локалью в Linux, необходим пакет locales, который должен быть у Вас установлен. В большинстве случаев пакет locales уже будет у Вас установлен, поэтому для проформы просто проверяем этот факт.
Посмотреть установленную locale linux можно командой:
Для ручного указания кодировке в Linux Mint, Debian или ubuntu нужно отредактировать конфигурационный файл /etc/locale.gen :
Команду sudo не нужна, если Вы зашли как суперпользователь. Это относится к Linux Mint и Ubuntu, так как Debian ничего не знает о команде sudo.
В этом файле необходимо найти строчку и расскомментировать с той locale, которая Вам нужна. Для добавления кириллицы нужно раскомментировать строчки с UTF-8 или CP1251 .
- если хотим указать, чтобы ОС работала в UTF -8, раскомментирум:
- если хотим указать, чтобы ОС работала в CP1251, раскомментирум:
Стоит обратить внимание, что первые 2 символа (в нашем примере это ru) говорят нам о языке локализации (кириллица).
После этого переопределяем настройки locales командой:
Команда locale-gen позволяет запустить скрипт /etc/locale.gen и перечитывает все кодировки для консоли.
Чтобы увидеть кириллицу в консоли Linux, остается только перелогиниться.
Источник
Как включить поддержку UTF-8 в консоли Linux?
Сейчас это выглядит так:
Конечно (ограничено количеством глифов, но, похоже, ваш язык использует кодировку UTF-8).
Я использую это для тестирования:
и (называя его «utf8»), «utf8 on» включает кодировку.
Используя пример, приведенный в pstree , вот пример после запуска скрипта (до того же типа вывода, что и в вопросе):
Как отмечено в комментарии, есть сценарий unicode_start который делает больше , но все, что необходимо для решения поставленного вопроса, – это небольшой сценарий, используемый в качестве примера.
Обращаясь к другому комментарию: по крайней мере, на моей системе (и на скриншоте, указанном в вопросе) все символы, используемые pstree , поставляются в шрифте 512-glyph, который используется по умолчанию для поддержки Unicode в консоли Linux.
- console_codes – удаленные и управляющие последовательности консоли Linux
- В тумане: как работают консольные шрифты Linux
Убедитесь, что у вас установлен пакет locales
Если нет, установите его
Как root, введите
вы можете перемещаться по этому списку с помощью клавиш со стрелками вверх / вниз, например, выберите en_US-UTF-8
отредактируйте свой .bashrc , добавив следующие строки:
Запустите команду locale , выход должен быть похож на этот:
Источник
Utf-8 linux console
Contents
A Quick Look at Using UTF-8 in the Linux Console (without X)
A few people have asked about this in ##slackware lately so I though I’d put down a few notes on how I got utf-8 up and running. Feel free to add any further info.
In these days of high powered X desktop environments with all their flashy composite bells and whistles it may seem strange to worry about how the plain Linux console behaves, but we need to remember that there are some very nice applications that live in the console and can be just as (or even more) productive than the X Windows counterparts. I’m thinking of screen, irssi, mutt, elinks, vim/vi, mplayer (using svga), links, zgv and slrn to name but a few. And of course we have to mention Slackware tools like pgktool, slackpkg and sbopkg. Once you get hooked on using the console it is hard to go back. Anyway here we go .
The Console
The first thing to do is configure the console. There is a kernel parameter we can add to /etc/lilo.conf to do this:
Here’s an example from mine:
Once you have saved lilo.conf and run lilo a quick reboot is needed.
LANG environment variable
I find that typing multibyte characters like «ä» and erasing them with backspace, I can erase much more than what I wrote. It helps to set the LANG variable, preferably by editing /etc/profile.d/lang.sh (or lang.csh) to set it to en_US.UTF-8 or similar.
Fonts
After that we need to find a font that actually contains the characters you want to see. My ‘font of the moment’ is lat9w-16. This contains the British £ (pound) and € (euro) symbols that I need, plus a lot of useful accented characters. But what is just as important are the correct drawing characters so that curses programs like pkgtool and sbopkg are printed on the screen correctly. If you experiment with the setconsolefont command you will find that some fonts draw curses box borders as squares or question marks, so check out some fonts and see which ones work and which don’t. The setconsolefont command will put your chosen font into /etc/rc.d/rc.font so it will load at bootup.
Keyboard
Ok, great you can now read characters correctly, but you need the correct keymap to be able to type them. That’s a little harder. If you can find a utf-8 keymap for your locale/hardware then that’s fine. Personally I didn’t find any of the installed keymaps suitable so I looked around for an alternative. I found a uk-utf8 keymap on the intertubes, but this was unfortunately missing all the Ctrl+[a-z] keys so I edited it and added my own. I also added some AltGr+[a-z] (well not all of those) for accented characters. You may find this keymap useful as a starting point to create your own if you cannot find a more suitable one. Have a look through the comments and the codes and you should pick up the method. To add your own combinations you will need to know the correct codes for the characters you need. You can find a table of utf-8 characters here:
Look up the code in that table and convert it to hex. E.G. è is 232 in decimal, E8 in hex; é is code 233 in decimal, E9 in hex, so the entry in your keymap should be:
You can find the keycodes with the showkey program. Once edited you can load the map with the loadkeys program. Loadkeys will update /etc/rc.d/rc.keymap but you will need to copy the keymap to /usr/share/kbd/keymaps/i386/qwerty/ so it is found on bootup. Here is a link to my updated uk-utf8 map:
You can load this ungzipped but it’s better to gzip it back after editing to keep things consistent.
Conclusion
By now you should have a fully usable keyboard/console correctly printing unicode characters. You will probably need to tell some programs like mutt and irrsi that you are using a utf-8 system.
Note: There exists two shell scripts — unicode_start and unicode_stop. Typing unicode_start [font] will load the required font and set up keyboard correctly for unicode input.
Источник