iconv — Преобразовывает символы строки в другую кодировку


Содержание

Iconv — Преобразовывает символы строки в другую кодировку

(PHP 4 >= 4.0.5, PHP 5)

iconv — Преобразовывает символы строки в другую кодировку

Описание string iconv ( string in_charset, string out_charset, string str )

Производит преобразование кодировки символов строки str из начальной кодировки in_charset в конечную out_charset . Возвращает строку в новой кодировке, или FALSE в случае ошибки.

Если добавить //TRANSLIT к параметру out_charset будет включена транслитеризация. Это означает, что вслучае, когда символа нет в конечной кодировке, он заменяется одним или несколькими аналогами. Если добавить //IGNORE , то символы, которых нет в конечной кодировке, будут опущены. Иначе, будет возвращена строка str , обрезанная до первого недопустимого символа.

FPublisher

Web-технологии: База знаний

Документация PHP

iconv

(PHP 4 >= 4.0.5, PHP 5)

iconv — Преобразовывает символы строки в другую кодировку

Описание

string iconv ( string $in_charset , string $out_charset , string $str )

Производит преобразование кодировки символов строки str из начальной кодировки in_charset в конечную out_charset . Возвращает строку в новой кодировке, или FALSE в случае ошибки.

Если добавить //TRANSLIT к параметру out_charset будет включена транслитеризация. Это означает, что вслучае, когда символа нет в конечной кодировке, он заменяется одним или несколькими аналогами. Если добавить //IGNORE, то символы, которых нет в конечной кодировке, будут опущены. Иначе, будет возвращена строка str , обрезанная до первого недопустимого символа.

Пример #1 Пример использования iconv():

echo iconv ( «KOI8-U» , «UTF-8» , «Пора переходить на юникод.» );
?>

Как конвертировать файлы в кодировку UTF-8 в Linux

В этой статье мы поговорим о кодировке символов и рассмотрим примеры преобразования файлов из одной кодировки в другую с помощью инструмента командной строки. Затем, мы рассмотрим, как конвертировать несколько файлов из любой кодировки в кодировку UTF-8 в Linux.

Как вы, знаете, компьютер не понимает и не хранит буквы, цифры или что-либо еще. Он все запоминает и воспринимает через биты информации. Бит имеет только два возможных значения, то есть или 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.

Конвертация кириллицы в UTF8 в PHP?

Подскажите, пожалуйста, самый оптимальный вариант конвертации строки в нашей кодировке :) в кодировку универсальную.

Вот этот кор работает глючно по какой-то причине. Иногда теряются некоторые слова, или вообще вся строка.

  • Вопрос задан более трёх лет назад
  • 100225 просмотров

Мы пользуемся таким способом:

$convertedText = mb_convert_encoding($text, ‘utf-8’, mb_detect_encoding($text));

Да просто вопросы нужно задавать конкретные.

«Иногда теряются некоторые слова» — когда именно? Какие конкретно слова?

1. Иногда имелось в виду, иногда строка конвертиртируется нормально, иногда нет. Но строки разные конечно.

2. например «Еда-наш друг, еда-наш враг» получаем на выходе «-наш друг, еда-наш враг»

PHP iconv() — преобразование кодировки символов

Современный сайт представляет собой одну или несколько HTML-страниц. Он может быть разработан как есть, и быть неизменными всегда. Страницы сайта могут также создаваться на лету. PHP iconv адаптирует HTML под нужный браузер в момент прихода посетителя. В любом случае каждая страница должна указать свою кодировку в секции HEAD.

Кодировка страницы имеет два аспекта разнесенные во времени, которые следует учитывать. Процесс разработки: хостинг у разработчика, и он соответствует инструментальным средствам. Процесс эксплуатации: хостинг оптимизируется под сайт и поток посетителей.

Множественность кодировки

Любой сайт — это информационная структура на хостинге в конкретной кодировке. Посредством PHP iconv любая кодировка преобразуется к нужной. В ходе разработки и модернизации любой сайт — это функциональность на страницах используемой системы управления сайтом или текст в конкретной кодировке в избранном текстовом редакторе.

По общему правилу, кодировка ресурса, настройки хостинга, кодировка редактора HTML-страниц, файлов объектов, скриптов, таблиц CSS и других файлов ресурса должны совпадать.

В приведенном примере позиция (1) является современным способом указания нужной кодировки страницы. В ней можно обозначить «windows-1251» или «UTF-8». Можно сослаться на иную кодировку.

Позиции (2.1) и (2.2) взаимно исключают друг друга. Нужно выбирать что-то одно. Предпочтительно использовать вариант указания кодировки конструкцией (1). В этом случае всегда можно будет использовать функцию iconv PHP: windows 1251 код легко привести в UTF-8.

Особенности учета кодировки

Недостаточно указать кодировку страницы. Даже когда разработка веб-ресурса идет полным ходом: хостинг и сайт находятся в одной кодировке. Инструментальные средства, прежде всего редактор, просмотрщик и тестер PHP, — все работает без проблем и сбоев. Но может возникнуть непредвиденная ситуация.

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

Проблема снимется сама собой. База данных не единственный источник проблем с кодировкой. Чтение сторонних сайтов, например с целью парсинга или поиска информации, может привести к получению информации в любой кодировке. Как этого избежать?

PHP iconv позволяет решить проблему преобразования информации из любого источника в нужную кодировку.

iconv() не переводит некоторые символы

При преобразовании строки из кодировки «utf-8» в «windows-1251» iconv() ничего не выдаёт. Думаю, что это из-за символов типа «☕». Как это решить?

1 ответ 1

Не используйте кодировку windows-1251, на дворе уже почти 2020 год.
P.S. А если сильно надо, то делайте это так, например:

Если добавить к out_charset строку //TRANSLIT, включается режим транслитерации. Это значит, что в случае, если символ не может быть представлен в требуемой кодировке, он будет заменен на один или несколько нескольких наиболее близких по внешнему виду символов. Если добавить строку //IGNORE, то символы, которые не могут быть представлены в требуемой кодировке, будут удалены. В случае отсутствия вышеуказанных параметров при наличии некорректных символов строка str будет обрезана до первого такого символа, будет сгенерирована ошибка уровня E_NOTICE и функция вернет FALSE.

Как определить кодировку файла или строки. Как конвертировать файлы в кодировку UTF-8 в Linux

В этой инструкции мы опишем что такое кодировка символов и рассмотрим несколько примеров конвертации файлов из одной кодировки в другую с использованием инструмента командной строки. Наконец, мы узнаем, как на Linux конвертировать несколько файлов из одного набора символов (charset) в UTF-8 кодировку.

Возможно, вы уже в курсе, что компьютер не понимает и не сохраняет буквы, числа или что-то ещё чем обычно оперируют люди. Компьютер работает с битами. Бит имеет только два возможных значения: 0 или 1, «истина» или «ложь», «да» или «нет». Все другие вещи, вроде букв, цифр, изображений должны быть представлены в битах, чтобы компьютер мог их обрабатывать.

Илон Маск рекомендует:  Что такое код ftp_rawlist

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

Имеются различные схемы кодирования, среди них такие как ASCII, ANSI, Unicode. Ниже пример ASCII кодировки.

Программы для определения кодировки в Linux

Команда file -i показывает неверную кодировку

Чтобы узнать кодировку файла используется команда file с флагами -i или —mime, которые включают вывод строки с типом MIME. Пример:

Команда file показывает кодировки, но для одного из моих файлов она неверна. Рассмотрим ещё одну альтернативу.

Программа enca для определения кодировки файла


Утилита enca определяет кодировку текстовых файлов и, если нужно, конвертирует их.

Установим программу enca:

В этот раз для обоих файлов кодировка определена верно.

Запуск команды без опции выводит что-то вроде:

Это удобно для чтения людьми. Для использования вывода программы в скриптах есть опция -e, она выводит только универсальное имя, используемое в enca:

Если вам нужно имя, которое используется для названия кодировок в iconv, то для этого воспользуйтесь опцией -i:

Для вывода предпочитаемого MIME имени кодировки используется опция -m:

Для правильного определения кодировки программе enca нужно знать язык файла. Она получает эти данные от локали. Получается, если локаль вашей системы отличается от языка документа, то программа не сможет определить кодировку.

Язык документа можно явно указать опцией -L:

Чтобы узнать список доступных языков наберите:

Как определить кодировку строки

Для определения, в какой кодировке строка, используйте одну из следующих конструкций:

Вместо СТРОКА_ДЛЯ_ПРОВЕРКИ впишите строку, для которой нужно узнать кодировку. Если у вас строка не на русском языке, то откорректируйте значение опции -L.

Если возникло сообщение об ошибке:

то попробуйте установить chardet из стандартных репозиториев.

Если chardet не найдена в репозиториях, то поищите программу uchardet, затем установите и используйте её.

Изменение кодировки в Linux

Использование команды iconv

В Linux для конвертации текста из одной кодировки в другую используется команда iconv.

Синтаксис использования iconv имеет следующий вид:

Где -f или —from-code означает кодировку исходного файла -t или —to-encoding указывают кодировку нового файла. Флаг -o является необязательным, если его нет, то содержимое документа в новой кодировке будет показано в стандартном выводе.

Чтобы вывести список всех кодировок, запустите команду:

Конвертирование файлов из windows-1251 в UTF-8 кодировку

Далее мы научимся, как конвертировать файлы из одной схемы кодирования (кодировки) в другую. В качестве примера наша команда будет конвертировать из windows-1251 (которая также называется CP1251) в UTF-8 кодировку.

Допустим, у нас есть файл mypoem_draft.txt его содержимое выводится как

Мы начнём с проверки кодировки символов в файле, просмотрим содержимое файла, выполним конвертирование и просмотрим содержимое файла ещё раз.

Примечание: если к кодировке, в который мы конвертируем файл добавить строку //IGNORE, то символы, которые невозможно конвертировать, будут отбрасываться и после конвертации показана ошибка.

Если к конечной кодировке добавляется строка //TRANSLIT, конвертируемые символы при необходимости и возможности будут транслитерированы. Это означает, когда символ не может быть представлен в целевом наборе символов, он может быть заменён одним или несколькими выглядящими похоже символами. Символы, которые вне целевого набора символов и не могут быть транслитерированы, в выводе заменяются знаком вопроса (?).

Изменение кодировки программой enca

Программа enca не только умеет определять кодировку, но и может конвертировать текстовые файлы в другую кодировку. Особенностью программы является то, что она не создаёт новый файл, а изменяет кодировку в исходном. Желаемую кодировку нужно указать после ключа -x:

Конвертация строки в правильную кодировку

Команда iconv может конвертировать строки в нужную кодировку. Для этого строка передаётся по стандартному вводу. Достаточно использовать только опцию -f для указания кодировки, в которую должна быть преобразована строка. Т.е. используется команда следующего вида:

Также для изменения кодировки применяются программы:

  • piconv
  • recode
  • enconv (другое название enca)

iconv

(PHP 4 >= 4.0.5, PHP 5, PHP 7)

iconv — Преобразование строки в требуемую кодировку

Описание

Преобразует набор символов строки str из кодировки in_charset в out_charset .

Список параметров

Кодировка входной строки.


Требуемая на выходе кодировка.

Если добавить к out_charset строку //TRANSLIT, включается режим транслитерации. Это значит, что в случае, если символ не может быть представлен в требуемой кодировке, он будет заменен на один или несколько нескольких наиболее близких по внешнему виду символов. Если добавить строку //IGNORE, то символы, которые не могут быть представлены в требуемой кодировке, будут удалены. В случае отсутствия вышеуказанных параметров будет сгенерирована ошибка уровня E_NOTICE , а функция вернет FALSE .

Как будет работат //TRANSLIT и будет ли вообще, зависит от системной реализации iconv() ( ICONV_IMPL ). Известны некоторые реализации, которые просто игнорируют //TRANSLIT, так что конвертация для символов некорректных для out_charset скорее всего закончится ошибкой.

Илон Маск рекомендует:  Что такое код asp logextfilecomputername

Строка, которую необходимо преобразовать.

Возвращаемые значения

Возвращает преобразованную строку или FALSE в случае возникновения ошибки.

Список изменений

Версия Описание
5.4.0 Начиная с этой версии, функция возвращает FALSE на некорректных символах, только если в выходной кодировке не указан //IGNORE. До этого функция возвращала часть строки.

Примеры

Пример #1 Пример использования iconv()

= «Это символ евро — ‘€’.» ;

echo ‘Исходная строка : ‘ , $text , PHP_EOL ;
echo ‘С добавлением TRANSLIT : ‘ , iconv ( «UTF-8» , «ISO-8859-1//TRANSLIT» , $text ), PHP_EOL ;
echo ‘С добавлением IGNORE : ‘ , iconv ( «UTF-8» , «ISO-8859-1//IGNORE» , $text ), PHP_EOL ;
echo ‘Обычное преобразование : ‘ , iconv ( «UTF-8» , «ISO-8859-1» , $text ), PHP_EOL ;

Результатом выполнения данного примера будет что-то подобное:

Конвертирование файлов в кодировку UTF-8 в Linux

Оригинал: How to Convert Files to UTF-8 Encoding in Linux
Автор: Aaron Kili
Дата публикации: 2 ноября 2020 года
Перевод: А. Кривошей
Дата перевода: ноябрь 2020 г.

В этом руководстве мы рассмотрим кодировки символов и разберем несколько примеров преобразования файлов из одной кодировки в другую с помощью утилиты командной строки. Затем мы покажем, как преобразовать файлы в 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, не забывая об имени выходного файла «$ . utf8.converted».

Для получения дополнительной информации почитайте руководство iconv:

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

Если вы хотите лучше понять проблему кодировок символов, прочитайте следующие статьи:

Iconv — Преобразовывает символы строки в другую кодировку

Сообщений: 13744
Регистрация: 01.03.2004

ниче не понял, но попробовал бы
iconv()

iconv
(PHP 4 >= 4.0.5, PHP 5)

iconv — Преобразовывает символы строки в другую кодировку
Описание
string iconv ( string in_charset, string out_charset, string str )

Производит преобразование кодировки символов строки str из начальной кодировки in_charset в конечную out_charset. Возвращает строку в новой кодировке, или FALSE в случае ошибки.

Если добавить //TRANSLIT к параметру out_charset будет включена транслитеризация. Это означает, что вслучае, когда символа нет в конечной кодировке, он заменяется одним или несколькими аналогами. Если добавить //IGNORE, то символы, которых нет в конечной кодировке, будут опущены. Иначе, будет возвращена строка str, обрезанная до первого недопустимого символа.

Сообщение отредактировал Alt+0172 — 13.08.2007 — 16:48

Понравилась статья? Поделиться с друзьями:
Кодинг, CSS и SQL