- Как преобразовать файлы в кодировку UTF-8 в Linux
- Преобразование файлов из кодировки UTF-8 в кодировку ASCII
- Преобразование нескольких файлов в кодировку UTF-8
- Как конвертировать файлы в кодировку UTF-8 в Linux
- Преобразование файлов из UTF-8 в кодировку ASCII
- Преобразование нескольких файлов в кодировку UTF-8
- Курсы Cisco, Linux, кибербезопасность, DevOps / DevNet, Python с трудоустройством!
- How to convert \uXXXX unicode to UTF-8 using console tools in *nix
- 11 Answers 11
Как преобразовать файлы в кодировку UTF-8 в Linux
В этом руководстве мы опишем, что такое кодировка символов, и рассмотрим несколько примеров преобразования файлов из одной кодировки символов в другую с помощью инструмента командной строки. Затем, наконец, мы рассмотрим, как преобразовать несколько файлов из любого набора символов (charset) в кодировку UTF-8 в Linux.
Как вы, возможно, уже имеете в виду, компьютер не понимает и не хранит буквы, цифры или что-либо еще, что мы, люди, можем воспринимать, кроме битов. Бит имеет только два возможных значения: 0 или 1 , true или false , да или нет . Любая другая вещь, такая как буквы, цифры, изображения, должна быть представлена в битах для обработки компьютером.
Проще говоря, кодировка символов — это способ сообщить компьютеру, как интерпретировать необработанные нули и единицы в фактические символы, где символ представлен набором чисел. Когда мы набираем текст в файле, слова и предложения, которые мы формируем, состоят из разных символов, а символы организованы в кодировку.
Существуют различные схемы кодирования, такие как ASCII, ANSI, Unicode и другие. Ниже приведен пример кодировки ASCII.
Character bits A 01000001 B 01000010
В Linux инструмент командной строки icon используется для преобразования текста из одной формы кодировки в другую.
Вы можете проверить кодировку файла с помощью команды file, используя флаг -i или —mime , который разрешает печать типа mime. строка, как в примерах ниже:
$ file -i Car.java $ file -i CarDriver.java
Синтаксис использования icon следующий:
$ iconv option $ iconv options -f from-encoding -t to-encoding inputfile(s) -o outputfile
Где -f или —from-code означает входную кодировку, а -t или —to-encoding указывает выходное кодирование.
Чтобы получить список всех известных кодированных наборов символов, выполните следующую команду:
Преобразование файлов из кодировки UTF-8 в кодировку ASCII
Далее мы узнаем, как преобразовать одну схему кодирования в другую. Приведенная ниже команда преобразует кодировку ISO-8859-1 в UTF-8.
Рассмотрим файл с именем input.file , который содержит символы:
Начнем с проверки кодировки символов в файле, а затем просмотрим содержимое файла. Мы можем преобразовать все символы в кодировку ASCII.
После выполнения команды icon мы проверяем содержимое выходного файла и новую кодировку символов, как показано ниже.
$ file -i input.file $ cat input.file $ iconv -f ISO-8859-1 -t UTF-8//TRANSLIT input.file -o out.file $ cat out.file $ file -i out.file
Примечание. В случае добавления строки //IGNORE в to-encoding символы, которые не могут быть преобразованы, и ошибка отображается после преобразования.
Опять же, предположим, что строка //TRANSLIT добавлена в to-encoding, как в приведенном выше примере (ASCII//TRANSLIT), преобразуемые символы транслитерируются по мере необходимости и, если возможно, . Это означает, что в случае, если символ не может быть представлен в целевом наборе символов, он может быть аппроксимирован одним или несколькими похожими символами.
Следовательно, любой символ, который не может быть транслитерирован и не входит в целевой набор символов, в выводе заменяется знаком вопроса (?) .
Преобразование нескольких файлов в кодировку UTF-8
Возвращаясь к нашей основной теме, чтобы преобразовать несколько или все файлы в каталоге в кодировку UTF-8, вы можете написать небольшой сценарий оболочки с именем encoding.sh следующим образом:
#!/bin/bash #enter input encoding here FROM_ENCODING="value_here" #output encoding(UTF-8) TO_ENCODING="UTF-8" #convert CONVERT=" iconv -f $FROM_ENCODING -t $TO_ENCODING" #loop to convert multiple files for file in *.txt; do $CONVERT "$file" -o "$.utf8.converted" done exit 0
Сохраните файл, затем сделайте скрипт исполняемым. Запустите его из каталога, где находятся ваши файлы ( *.txt ).
$ chmod +x encoding.sh $ ./encoding.sh
Важно: вы также можете использовать этот скрипт для общего преобразования нескольких файлов из одной заданной кодировки в другую, просто поэкспериментируйте со значениями FROM_ENCODING и переменную TO_ENCODING , не забывая имя выходного файла \$ .utf8.converted\ .
Для получения дополнительной информации просмотрите справочную страницу icon.
Подводя итог этому руководству, понимание кодировки и того, как преобразовать одну схему кодировки символов в другую, является необходимым знанием для каждого пользователя компьютера, особенно для программистов, когда дело доходит до работы с текстом.
Наконец, вы можете связаться с нами, используя раздел комментариев ниже для любых вопросов или отзывов.
Как конвертировать файлы в кодировку UTF-8 в Linux
В этой статье мы поговорим о UTF-8, кодировке символов и рассмотрим примеры преобразования файлов из одной кодировки в другую с помощью инструмента командной строки. Затем, мы рассмотрим, как конвертировать несколько файлов из любой кодировки в кодировку UTF-8 в Linux.
Как вы, знаете, компьютер не понимает и не хранит буквы, цифры или что-либо еще. Он все запоминает и воспринимает через биты информации. Бит имеет только два возможных значения, то есть 0 или 1, true или false. Все остальное: буквы, цифры, изображения, должны быть представлены в битах для того чтобы компьютер мог их обрабатывать.
Проще говоря, кодировка символов — это способ информирования компьютера о том, как интерпретировать необработанные нули и единицы в действительные символы, где символ представлен набором чисел. Когда мы вводим текст в файл, слова и предложения, которые мы формируем, накапливаются из разных символов, а символы группируются в кодировку.
Существуют различные схемы кодирования, такие как ASCII, ANSI, Unicode и другие. Ниже приведен пример кодировки ASCII.
Инструмент командной строки 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 следующим образом:
Сохраните файл, затем сделайте его исполняемым файлом скрипта. Запустите этот скрипт из каталога, в котором находятся ваши файлы (*.txt).
Важно. Вы также можете использовать этот скрипт для общего преобразования нескольких файлов из одной кодировки в другую, просто поэкспериментируйте со значениями переменной FROM_ENCODING и TO_ENCODING, не забывая имя выходного файла «$.utf8.converted».
Для получения дополнительной информации просмотрите страницу iconv man.
Спасибо за уделенное время на прочтение статьи!
Если возникли вопросы, задавайте их в комментариях.
Подписывайтесь на обновления нашего блога и оставайтесь в курсе новостей мира инфокоммуникаций!
Чтобы знать больше и выделяться знаниями среди толпы IT-шников, записывайтесь на курсы Cisco от Академии Cisco, курсы Linux от Linux Professional Institute на платформе SEDICOMM University.
Курсы Cisco, Linux, кибербезопасность, DevOps / DevNet, Python с трудоустройством!
Спешите подать заявку! Группы стартуют 25 января, 26 февраля, 22 марта, 26 апреля, 24 мая, 21 июня, 26 июля, 23 августа, 20 сентября, 25 октября, 22 ноября, 20 декабря.
- Поможем стать экспертом по сетевой инженерии, кибербезопасности, программируемым сетям и системам и получить международные сертификаты Cisco, Linux LPI, Python Institute.
- Предлагаем проверенную программу с лучшими учебниками от экспертов из Cisco Networking Academy, Linux Professional Institute и Python Institute, помощь сертифицированных инструкторов и личного куратора.
- Поможем с трудоустройством и стартом карьеры в сфере IT — 100% наших выпускников трудоустраиваются.
- Проведем вечерние онлайн-лекции на нашей платформе.
- Согласуем с вами удобное время для практик.
- Если хотите индивидуальный график — обсудим и реализуем.
- Личный куратор будет на связи, чтобы ответить на вопросы, проконсультировать и мотивировать придерживаться сроков сдачи экзаменов.
- Всем, кто боится потерять мотивацию и не закончить обучение, предложим общение с профессиональным коучем.
- отредактировать или создать с нуля резюме;
- подготовиться к техническим интервью;
- подготовиться к конкурсу на понравившуюся вакансию;
- устроиться на работу в Cisco по специальной программе. Наши студенты, которые уже работают там: жмите на #НашиВCisco Вконтакте, #НашиВCisco Facebook.
Чтобы учиться на курсах Cisco, Linux LPI, кибербезопасность, DevOps / DevNet, Python, подайте заявку или получите бесплатную консультацию.
How to convert \uXXXX unicode to UTF-8 using console tools in *nix
I use curl to get some URL response, it’s JSON response and it contains unicode-escaped national characters like \u0144 (ń) and \u00f3 (ó) . How can I convert them to UTF-8 or any other encoding to save into file?
11 Answers 11
Might be a bit ugly, but echo -e should do it:
-e interprets escapes, -n suppresses the newline echo would normally add.
Note: The \u escape works in the bash builtin echo , but not /usr/bin/echo .
As pointed out in the comments, this is bash 4.2+, and 4.2.x have a bug handling 0x00ff/17 values (0x80-0xff).
@cbuckley it was bash (as I added to the post, I figured out it was the bash builtin), but zsh’s echo works with \u too. csh ‘s does not, however.
@KrzysztofWolny The example is already in my post, either store the URL you’re trying to get into the URL variable, or just replace it manually. $(command) executes command , so $(curl $URL) fetches the page at $URL .
I don’t know which distribution you are using, but uni2ascii should be included.
$ sudo apt-get install uni2ascii
It only depend on libc6, so it’s a lightweight solution (uni2ascii i386 4.18-2 is 55,0 kB on Ubuntu)!
$ echo 'Character 1: \u0144, Character 2: \u00f3' | ascii2uni -a U -q Character 1: ń, Character 2: ó
That allow to display it, but not to save/convert it. even with uni2ascii unicode.txt > newfile.txt . iconv do it well
echo ‘Character 1: \u0144, Character 2: \u00f3’ | ascii2uni -a U -q > newfile.txt clearly works and saves the output into newfile.txt .
I found native2ascii from JDK as the best way to do it:
native2ascii -encoding UTF-8 -reverse src.txt dest.txt
Assuming the \u is always followed by exactly 4 hex digits:
#!/usr/bin/perl use strict; use warnings; binmode(STDOUT, ':utf8'); while (<>) < s/\\u([0-9a-fA-F])/chr(hex($1))/eg; print; >
The binmode puts standard output into UTF-8 mode. The s. command replaces each occurrence of \u followed by 4 hex digits with the corresponding character. The e suffix causes the replacement to be evaluated as an expression rather than treated as a string; the g says to replace all occurrences rather than just the first.
You can save the above to a file somewhere in your $PATH (don’t forget the chmod +x ). It filters standard input (or one or more files named on the command line) to standard output.
Again, this assumes that the representation is always \u followed by exactly 4 hex digits. There are more Unicode characters than can be represented that way, but I’m assuming that \u12345 would denote the Unicode character 0x1234 (ETHIOPIC SYLLABLE SEE) followed by the digit 5 .
In C syntax, a universal-character-name is either \u followed by exactly 4 hex digits, or \U followed by exactly 8 hexadecimal digits. I don’t know whether your JSON responses use the same scheme. You should probably find out how (or whether) it encodes Unicode characters outside the Basic Multilingual Plane (the first 2 16 characters).