Как изменить кодировку файла xml с utf 8 на windows 1251
Обновлено: 21.11.2024
Чтобы правильно отображать и редактировать файлы, IntelliJ IDEA необходимо знать, какую кодировку использовать. Как правило, файлы исходного кода в основном имеют кодировку UTF-8. Это рекомендуемая кодировка, если у вас нет других требований.
Чтобы определить кодировку файла, IntelliJ IDEA использует следующие шаги:
Если присутствует метка порядка байтов (BOM), IntelliJ IDEA будет использовать соответствующую кодировку Unicode независимо от всех других настроек. Дополнительные сведения см. в разделе Метка порядка байтов.
Если файл объявляет кодировку явно, IntelliJ IDEA будет использовать указанную кодировку. Например, это может относиться к файлам XML, HTML и JSP. Явное объявление также переопределяет все остальные настройки, но вы можете изменить его в редакторе.
Если в файле нет спецификации и явного объявления кодировки, IntelliJ IDEA будет использовать кодировку, настроенную для файла или каталога в настройках кодировки файла. Если для файла или каталога не настроена кодировка, IntelliJ IDEA будет использовать кодировку родительского каталога. Если кодировка родительского каталога также не настроена, IntelliJ IDEA будет использовать Project Encoding , а если проекта нет — Global Encoding .
Изменить кодировку, используемую для просмотра файла
Если IntelliJ IDEA неправильно отображает символы в файле, вероятно, ему не удалось определить кодировку файла. В этом случае вам необходимо указать правильную кодировку для просмотра и редактирования этого файла.
Открыв файл в редакторе, выберите Файл | Свойства файла | Кодировка файла в главном меню или щелкните виджет «Кодировка файла» в строке состояния и выберите правильную кодировку файла.
Список кодировок довольно большой. Вы можете использовать быстрый поиск, чтобы быстро найти правильную кодировку: начните печатать, когда всплывающее окно открыто.
Кодировки, помеченные или могут изменить содержимое файла. В этом случае IntelliJ IDEA открывает диалоговое окно, в котором вы можете выбрать, что делать с файлом:
Перезагрузить: загрузить файл в редактор с диска и применить изменения кодировки только к редактору. Вы увидите изменения содержимого, связанные с выбранной кодировкой, но сам файл не изменится.
Преобразовать: перезаписать файл выбранной кодировкой.
Это добавит ассоциацию для файла в настройки кодирования файла. IntelliJ IDEA будет использовать указанную кодировку для просмотра и редактирования этого файла.
Настройка параметров кодирования файлов
В диалоговом окне «Настройки/Настройки» ( Ctrl+Alt+S ) выберите «Редактор | Кодировки файлов .
IntelliJ IDEA использует эти настройки для просмотра и редактирования файлов, для которых не удалось определить кодировку, а также использует указанные кодировки для новых файлов.
Выберите кодировку, которую следует использовать, если другие параметры кодировки неприменимы.
Например, IntelliJ IDEA будет использовать эту кодировку для файлов, которые не являются частью какого-либо проекта, или когда вы извлекаете исходные коды из системы контроля версий.
Выберите кодировку для файлов, не указанных в таблице.
Укажите путь к файлам или каталогам, для которых вы хотите настроить кодировку.
Выберите кодировку для указанных файлов и каталогов.
Если этот селектор отключен, файл, вероятно, имеет спецификацию или явно указывает кодировку. В этом случае вы не можете настроить кодировку для этого файла.
Кодировка, выбранная для каталога, применяется ко всем файлам и подкаталогам в нем.
Кодировка по умолчанию для файлов свойств
Выберите кодировку для файлов свойств в вашем проекте.
Стандартный Java API предназначен для использования кодировки ISO 8859-1 для файлов свойств. Вы можете использовать escape-последовательности для символов, которые не определены этой кодировкой. Кроме того, вы можете определить кодировку по умолчанию для файлов свойств на уровне проекта и использовать другой API, который может считывать файлы свойств в указанной вами кодировке.
Прозрачное преобразование исходного кода в ASCII
Показывать национальные символы (не определенные в ISO 8859-1) вместо соответствующих escape-последовательностей.
Создать файлы UTF-8
Выберите, как IntelliJ IDEA должна создавать файлы UTF-8:
со спецификацией в окне и без спецификации в противном случае
По умолчанию IntelliJ IDEA создает файлы UTF-8 без спецификации, поскольку некоторые программы несовместимы со спецификацией и могут возникать проблемы при интерпретации скриптов. Однако в некоторых случаях вам может понадобиться иметь спецификацию в файлах UTF-8.
Чтобы добавить или удалить спецификацию из всех файлов UTF-8 в вашем проекте, щелкните правой кнопкой мыши имя своего проекта в окне инструмента "Проект" и выберите "Добавить спецификацию" или "Удалить спецификацию" .
Выберите кодировку вывода консоли
По умолчанию IntelliJ IDEA использует системную кодировку для просмотра вывода консоли.
В диалоговом окне «Настройки/Настройки» ( Ctrl+Alt+S ) выберите «Редактор | Общие | Консоль.
Как правило, вы можете обмениваться текстовыми файлами, не беспокоясь о том, как хранится текст. Однако если вы делитесь текстовыми файлами с людьми, которые работают на других языках, загружаете текстовые файлы через Интернет или делитесь текстовыми файлами с другими компьютерными системами, вам может потребоваться выбрать стандарт кодирования при открытии или сохранении файла.
Когда вы или кто-то другой открывает текстовый файл в Microsoft Word или в другой программе — возможно, на компьютере с системным программным обеспечением на языке, отличном от языка, который использовался для создания файла — стандарт кодирования помогает в этом. программа определяет, как представить текст, чтобы он был удобочитаемым.
Что вы хотите сделать?
Знакомство с кодировкой текста
То, что кажется вам текстом на экране, на самом деле сохраняется в виде числовых значений в текстовом файле. Ваш компьютер переводит числовые значения в видимые символы. Это достигается с помощью стандарта кодирования.
Стандарт кодирования — это схема нумерации, при которой каждому текстовому символу в наборе символов присваивается числовое значение. Набор символов может включать буквы алфавита, цифры и другие символы. Разные языки обычно состоят из разных наборов символов, поэтому существует множество различных стандартов кодирования для представления наборов символов, используемых в разных языках.
Разные стандарты кодирования для разных алфавитов
Стандарт кодирования, сохраненный в текстовом файле, предоставляет информацию, необходимую вашему компьютеру для отображения текста на экране. Например, в кодировке кириллицы (Windows) символ Й имеет числовое значение 201. Когда вы открываете файл, содержащий этот символ, на компьютере, использующем кодировку кириллицы (Windows), компьютер считывает числовое значение 201 и отображает Й на экране.
Однако, если вы откроете тот же файл на компьютере, использующем другую кодировку, компьютер отобразит любой символ, соответствующий числовому значению 201 в стандарте кодировки, который компьютер использует по умолчанию. Например, если на вашем компьютере используется западноевропейский (Windows) стандарт кодировки, символ в исходном файле на основе кириллицы будет отображаться как É, а не Й, поскольку в западноевропейской (Windows) кодировке значение 201 соответствует É.< /p>
Юникод: единый стандарт кодирования для многих алфавитов
Чтобы избежать проблем с кодированием и декодированием текстовых файлов, вы можете сохранять файлы в кодировке Unicode. Юникод поддерживает большинство наборов символов для всех языков, которые сегодня широко используются пользователями компьютеров.
Поскольку Word основан на Unicode, Word автоматически сохраняет файлы, закодированные как Unicode. Вы можете открывать и читать файлы в кодировке Unicode на своем англоязычном компьютере независимо от языка текста. Аналогичным образом, когда вы используете англоязычную систему для сохранения файлов в кодировке Unicode, файл может содержать символы, отсутствующие в западноевропейских алфавитах, например символы греческого, кириллического, арабского или японского языков.
Выберите стандарт кодирования при открытии файла
Если при открытии файла текст отображается искаженным, в виде вопросительных знаков или прямоугольников, возможно, Word не точно определил стандарт кодирования текста в файле. Вы можете указать стандарт кодирования, который можно использовать для отображения (декодирования) текста.
Перейдите на вкладку "Файл".
Нажмите "Параметры".
Нажмите "Дополнительно".
Прокрутите до раздела "Общие" и установите флажок "Подтверждать преобразование формата файла при открытии".
Примечание. Если этот флажок установлен, Word отображает диалоговое окно «Преобразовать файл» каждый раз, когда вы открываете файл в формате, отличном от формата Word (форматы Word включают .doc, .dot, .docx, .docm, . файлы dotx или .dotm). Если вы часто работаете с такими файлами, но редко хотите выбирать стандарт кодирования, не забудьте отключить этот параметр, чтобы это диалоговое окно не открывалось без необходимости.
Закройте и снова откройте файл.
В диалоговом окне "Преобразовать файл" выберите "Закодированный текст".
В диалоговом окне "Преобразование файла" выберите "Другая кодировка", а затем выберите нужный стандарт кодировки из списка.
Вы можете предварительно просмотреть текст в области предварительного просмотра, чтобы проверить, читается ли весь текст в выбранном стандарте кодирования.
Если почти весь текст выглядит одинаково (например, все прямоугольники или все точки), возможно, не установлен шрифт, необходимый для отображения символов. Если нужный вам шрифт недоступен, вы можете установить дополнительные шрифты.
Чтобы установить дополнительные шрифты, выполните следующие действия:
В Microsoft Windows нажмите кнопку "Пуск" и выберите "Панель управления".
Выполните одно из следующих действий:
В Windows 7
На панели управления нажмите "Удалить программу".
В списке программ выберите Microsoft Office или Microsoft Word, в зависимости от того, установили ли вы Word как часть Office или как отдельную программу, а затем нажмите Изменить.
В Windows Vista
На панели управления нажмите "Удалить программу".
В списке программ выберите Microsoft Office или Microsoft Word, в зависимости от того, установили ли вы Word как часть Office или как отдельную программу, а затем нажмите Изменить.
В Microsoft Windows XP
На панели управления нажмите "Установка и удаление программ".
В поле Установленные программы щелкните список Microsoft Office или Microsoft Word, в зависимости от того, установили ли вы Word как часть Office или как отдельную программу, а затем нажмите Изменить.
В разделе "Изменить установку Microsoft Office" нажмите "Добавить или удалить компоненты", а затем нажмите "Продолжить".
В разделе «Параметры установки» разверните «Общие функции Office», а затем разверните «Международная поддержка».
Выберите нужный набор шрифтов, нажмите стрелку рядом с выбором и выберите «Запустить с моего компьютера».
Совет. Когда вы открываете закодированный текстовый файл, Word применяет шрифты, указанные в диалоговом окне "Параметры веб-сайта". (Чтобы открыть диалоговое окно «Параметры веб-страницы», нажмите кнопку Microsoft Office, щелкните «Параметры Word», а затем нажмите «Дополнительно». В разделе «Общие» нажмите «Параметры веб-сайта».) Вы можете выбрать параметры на вкладке «Шрифты» в диалоговом окне «Параметры веб-сайта», чтобы настроить шрифт для каждого набора символов.
Выберите стандарт кодирования при сохранении файла
Если вы не выберете стандарт кодировки при сохранении файла, Word кодирует файл как Unicode. Обычно можно использовать кодировку Unicode по умолчанию, поскольку она поддерживает большинство символов большинства языков.
Если ваш документ будет открыт в программе, не поддерживающей Unicode, вы можете выбрать стандарт кодирования, соответствующий стандарту целевой программы. Например, Unicode позволяет создать документ на традиционном китайском языке в англоязычной системе. Однако, если документ будет открыт в программе на традиционном китайском языке, которая не поддерживает Unicode, вы можете сохранить документ в кодировке традиционного китайского языка (Big5). Когда документ открывается в программе на традиционном китайском языке, весь текст отображается правильно.
Примечание. Поскольку Unicode является наиболее полным стандартом, сохранение текста в любой другой кодировке может привести к тому, что некоторые символы больше не будут отображаться. Например, документ, закодированный в Unicode, может содержать текст на иврите и кириллице. Если этот документ сохранен с кодировкой кириллицы (Windows), текст на иврите больше не будет отображаться, а если документ сохранен с кодировкой на иврите (Windows), текст на кириллице больше не будет отображаться.
Если вы выберете стандарт кодирования, который не поддерживает символы, которые вы использовали в файле, Word помечает красным цветом те символы, которые не может быть сохранен. Вы можете предварительно просмотреть текст в выбранном вами стандарте кодирования перед сохранением файла.
Текст, отформатированный шрифтом Symbol или кодами полей, удаляется из файла при сохранении файла как закодированного текста.
Выберите стандарт кодирования
Перейдите на вкладку "Файл".
Нажмите "Сохранить как".
Если вы хотите сохранить файл в другой папке, найдите и откройте ее.
В поле Имя файла введите новое имя файла.
В поле "Тип файла" выберите "Обычный текст".
Нажмите "Сохранить".
Если появится диалоговое окно средства проверки совместимости Microsoft Office Word, нажмите "Продолжить".
В диалоговом окне "Преобразование файла" выберите вариант стандарта кодирования, который вы хотите использовать:
Чтобы использовать стандарт кодирования по умолчанию для вашей системы, нажмите Windows (по умолчанию).
Чтобы использовать стандарт кодирования MS-DOS, щелкните MS-DOS.
Чтобы выбрать конкретный стандарт кодирования, нажмите «Другая кодировка», а затем выберите нужный стандарт кодирования из списка. Вы можете предварительно просмотреть текст в области предварительного просмотра, чтобы проверить, читается ли весь текст в выбранном стандарте кодирования.
Примечание. Размер диалогового окна "Преобразование файла" можно изменить, чтобы можно было просмотреть больше документов.
Если вы получили сообщение "Текст, выделенный красным цветом, не будет корректно сохранен в выбранной кодировке", попробуйте выбрать другую кодировку или установите флажок "Разрешить замену символов".
Если вы разрешаете замену символов, Word заменяет символ, который не может быть отображен, на ближайший эквивалентный символ в выбранной вами кодировке. Например, три точки заменяют многоточие, а прямые кавычки заменяют фигурные кавычки.
Если в выбранной вами кодировке нет эквивалентного символа для символа, отмеченного красным, символ, отмеченный красным, будет сохранен как символ вне контекста, например вопросительный знак.
Если документ будет открыт в программе, которая не переносит текст с одной строки на другую, вы можете включить в документ жесткие разрывы строк, установив флажок Вставить разрывы строк, а затем указав, хотите ли вы, чтобы строки разрывы должны быть обозначены символом возврата каретки (CR), перевода строки (LF) или и тем, и другим в поле Конец строки с помощью поля.
Поиск стандартов кодирования, доступных в Word
Word распознает несколько стандартов кодирования и поддерживает стандарты кодирования, поставляемые с системным программным обеспечением на вашем компьютере.
В следующем списке систем письма показаны стандарты кодирования (также называемые кодовыми страницами), связанные с каждой системой письма.
В Oracle Reports шаблоны веб-отчетов по умолчанию настроены на западноевропейскую кодировку символов. Для других языков необходимо указать кодировку символов для файла JSP, используя как атрибут charset тега, так и директиву страницы.
Чтобы динамически связать соответствующую кодировку символов с файлом JSP, вы можете внести следующие изменения:
В каталоге oracle_home /reports/templates/ отредактируйте файлы rw*.html и Blank_template.jsp :
Измените директиву страницы на чтение
yourIANAencoding – это кодировка символов IANA, соответствующая части кодировки символов вашей переменной среды NLS_LANG.
Измените тег внутри тега следующим образом:
В каталоге oracle_home /reports/templates/ отредактируйте файл template.xsl :
Измените тег, чтобы он читался:
yourIANAencoding — это кодировка IANA, соответствующая части кодировки символов вашей переменной среды NLS_LANG.
Добавьте следующую директиву страницы:
Добавить или изменить тег внутри тега:
yourIANAencoding — это кодировка IANA, соответствующая части кодировки символов вашей переменной среды NLS_LANG.
В следующем примере задается набор японских символов:
Чтобы задать набор символов в отчете о макете на бумаге, который вы планируете использовать для создания XML, необходимо включить набор символов в свойство XML Prolog Value отчета:
&Encoding затем заменяется во время выполнения соответствующей настройкой.
Значения, выраженные для набора символов, должны вызывать набор символов, совместимый с тем, который указан для Oracle Reports Services. Значения наборов символов, используемых в Интернете (наборы символов, определенные IANA), отличаются от значений, выраженных в переменной среды NLS_LANG. В таблице 23-2 перечислены часто используемые наборы символов, определенные IANA, для параметра charset:
Значения набора символов, определенные IANA, не чувствительны к регистру. Вы можете вводить их в верхнем или нижнем регистре.
Выполняет преобразование набора символов в строке string из from_encoding в to_encoding .
Параметры
Вводная кодировка.
Выходная кодировка.
Если вы добавите строку //TRANSLIT к to_encoding, активируется транслитерация. Это означает, что когда символ не может быть представлен в целевой кодировке, он может быть аппроксимирован одним или несколькими похожими символами. Если вы добавляете строку //IGNORE , символы, которые не могут быть представлены в целевом наборе символов, автоматически отбрасываются. В противном случае генерируется E_NOTICE и функция возвращает false .
То, как работает //TRANSLIT, зависит от реализации iconv() в системе (см. ICONV_IMPL ). Известно, что некоторые реализации игнорируют //TRANSLIT , поэтому преобразование может завершиться ошибкой для символов, недопустимых для to_encoding .
Строка для преобразования.
Возвращаемые значения
В случае ошибки возвращает преобразованную строку или значение false.
Примеры
= "Это символ евро '€'." ;
echo 'Исходный:', $text, PHP_EOL;
echo 'ТРАНСЛИТ:', iconv("UTF-8", "ISO-8859-1//TRANSLIT", $text), PHP_EOL;< br />echo 'ИГНОРИРОВАТЬ:', iconv("UTF-8", "ISO-8859-1//IGNORE", $text), PHP_EOL;
echo 'Обычный:', iconv("UTF-8 ", "ISO-8859-1", $text), PHP_EOL;
Приведенный выше пример выведет что-то похожее на:
Примечания, внесенные пользователями 39 примечаний
Опция "//игнорировать" не работает с последними версиями библиотеки iconv. Так что если у вас возникли проблемы с этим вариантом, вы не одиноки.
Это означает, что в настоящее время вы не можете использовать эту функцию для фильтрации недопустимых символов. Вместо этого он молча терпит неудачу и возвращает пустую строку (или вы получите уведомление, но только если у вас включен E_NOTICE).
Это известная ошибка с известным решением, по крайней мере, с 2009 года, но, похоже, никто не хочет ее исправлять (PHP должен передать параметр -c в iconv). В последнем выпуске 5.4.3 он все еще не работает.
[ОБНОВЛЕНИЕ 15 ИЮНЯ 2012 Г.]
Вот обходной путь.
ini_set('mbstring.substitute_character', "нет");
$text= mb_convert_encoding($text, 'UTF-8', 'UTF-8');
Это удалит недопустимые символы из строк UTF-8 (чтобы вы могли вставить их в базу данных и т. д.). Вместо «none» вы также можете использовать значение 32, если хотите, чтобы вместо недопустимых символов вставлялись пробелы.
Обратите внимание, что iconv('UTF-8', 'ASCII//TRANSLIT', . ) не работает должным образом, если для языкового стандарта LC_CTYPE установлено значение C или POSIX. Вы должны выбрать другую локаль, иначе все символы, отличные от ASCII, будут заменены вопросительными знаками. По крайней мере, это верно для glibc 2.5.
Пример:
( LC_CTYPE , 'POSIX' );
echo iconv ( 'UTF-8' , 'ASCII//TRANSLIT' , "Žluťoučký kůň\n" );
// ?lu?ou?k? к??
setlocale (LC_CTYPE, 'cs_CZ');
echo iconv ('UTF-8', 'ASCII//TRANSLIT', "Žluťoučký kůň\n");
// Злутоуцкий кун
?>
Интересно, что установка разных целевых языков приводит к разным, но подходящим транслитерациям. Например:
//немецкое
$utf8_sentence = 'Weiß, Goldmann, Göbel, Weiss, Göthe, Goethe und Götz' ;
//Великобритания
setlocale ( LC_ALL , 'en_GB' );
//транслитерация
$trans_sentence = iconv ('UTF-8', 'ASCII//TRANSLIT', $utf8_sentence);
//дает [Weiss, Goldmann, Gobel, Weiss, Gothe, Goethe und Gotz]
//это наша исходная строка, преобразованная в 7-битный ASCII, как
//человек, говорящий по-английски это (т.е. просто удалить умлауты)
echo $trans_sentence . PHP_EOL ;
//Германия
setlocale ( LC_ALL , 'de_DE' );
$trans_sentence = iconv ('UTF-8', 'ASCII//TRANSLIT', $utf8_sentence);
//дает [Weiss, Goldmann, Goebel, Weiss, Goethe, Goethe und Goetz]
//именно так немецкий транслитерировал бы эти
//умлаутированные символы, если бы ему пришлось использовать 7- бит ASCII!
//(потому что на самом деле ä = ae, ö = oe и ü = ue)
echo $trans_sentence . PHP_EOL ;
для тестирования различных комбинаций преобразований между кодировками (когда мы не знаем исходную кодировку и удобную кодировку назначения) это пример:
= массив ("UTF-8", "ASCII", "Windows-1252", "ISO-8859-15", "ISO-8859-1", "ISO-8859-6", "CP1256") ;
$цепочка = "" ;
foreach ($tab as $i)
<
foreach ($tab as $j)
<
$chain .= "$i$j" . iconv($i, $j, "$my_string");
>
>
эхо $цепочка ;
?>
затем после отображения вы используете $i$j, который показывает хорошее отображение.
Примечание: вы можете добавить другие кодировки в $tab для проверки других случаев.
Как и многие другие люди, я столкнулся с серьезными проблемами при использовании iconv() для преобразования между кодировками (в моем случае из UTF-8 в ISO-8859-15), особенно для больших строк.
Основная проблема здесь заключается в том, что когда ваша строка содержит недопустимые символы UTF-8, нет действительно прямого способа справиться с ними. iconv() просто (и молча!) завершает строку при обнаружении проблемных символов (также при использовании //IGNORE), возвращая обрезанную строку.
= html_entity_decode(htmlentities($oldstring, ENT_QUOTES, 'UTF-8'), ENT_QUOTES, 'ISO-8859-15');
?>
Обходной путь, предложенный здесь и в других местах, также не работает при обнаружении недопустимых символов, по крайней мере, сбрасывая полезную заметку ("htmlentities(): Invalid multibyte sequence in arguments in.")
Я нашел много подсказок, предложений и альтернативных методов (это страшно и, на мой взгляд, не очень хороший знак того, сколько способов PHP изначально предоставляет для преобразования кодировки строк), но ни один из них не работал, кроме этого :
= mb_convert_encoding ($oldstring, 'ISO-8859-15', 'UTF-8');
Если при транслитерации вы получаете вопросительные знаки в выходных данных iconv, убедитесь, что для 'setlocale' установлено значение, поддерживаемое вашей системой.
Некоторые PHP CMS по умолчанию устанавливают для локали значение 'C', это может быть проблемой.
используйте команду "locale", чтобы узнать список..
(LC_CTYPE, 'en_AU.utf8');
$str = iconv ('UTF-8', 'ASCII//ТРАНСЛИТ', "Кот-д'Ивуар");
?>
Для тех, у кого возникают проблемы с отображением данных UCS-2 в браузере, вот простая функция, которая преобразует объекты ucs2 в html unicode:
Вот как преобразовать числа UCS-2 в числа UTF-8 в шестнадцатеричном формате:
функция ucs2toutf8 ($str)
<
for ( $i = 0 ; $i strlen ( $str ); $i += 4 )
<
$substring1 = $стр [$i]. $стр [$i + 1];
$substring2 = $str [ $i + 2 ]. $стр [ $i + 3 ];
if ( $substring1 == "00" )
<
$byte1 = "" ;
$byte2 = $substring2 ;
>
еще
<
$substring = $substring1 . $подстрока2 ;
$byte1 = dechex ( 192 + ( hexdec ( $ substring )/ 64 ));
$byte2 = dechex ( 128 + ( hexdec ( $ substring )% 64 ));
>
$utf8 .= $byte1 . $байт2 ;
>
возврат $utf8 ;
>
echo strtoupper ( ucs2toutf8 ("06450631062D0020" ));
?>
Ввод:
06450631062D
Вывод:
D985D8B1D8AD
Если вы хотите преобразовать кодировку Unicode без метки порядка байтов (BOM), добавьте в кодировку порядок следования байтов, например вместо "UTF-16", который добавит спецификацию в начало строки, используйте "UTF-16BE", которая преобразует строку без добавления спецификации.
('CP1252', 'UTF-16', $text); // со спецификацией
icon('CP1252', 'UTF-16BE', $text); // без спецификации
Как сказал orrd101, в последних версиях PHP (мы используем 5.6.5) есть ошибка с //IGNORE, из-за которой мы не могли преобразовать некоторые строки (например, "∙" из UTF8 в CP1251 с помощью //IGNORE).
Но мы нашли обходной путь и теперь используем оба флага //TRANSLIT и //IGNORE:
$text="∙";
icon("UTF8", "CP1251//TRANSLIT //игнорировать", $text);
Только сегодня я узнал, что версии PHP для Windows и *NIX используют разные библиотеки iconv и не совсем совместимы друг с другом.
Вот репост моего предыдущего кода, который теперь работает на большем количестве систем. Он максимально конвертирует и заменяет остальное вопросительными знаками:
if (! function_exists ('utf8_to_ascii')) setlocale (LC_CTYPE, 'en_AU.utf8');
if (@ iconv («UTF-8», «ASCII//IGNORE//TRANSLIT», 'é') === false ) // PHP, вероятно, использует библиотеку glibc (*NIX)
функция utf8_to_ascii($text) return iconv("UTF-8", "ASCII//TRANSLIT", $text);
>
>
else // PHP, вероятно, использует библиотеку libiconv (Windows)
function utf8_to_ascii ( $text ) if ( is_string ( $text )) // Включает комбинации символы, представленные в виде одного глифа
$text = preg_replace_callback ('/\X/u', __FUNCTION__, $text);
>
elseif ( is_array ( $text ) && count ( $text ) == 1 && is_string ( $text [ 0 ])) // ИГНОРИРУЙТЕ символы, которые нельзя преобразовать в ASCII
$text = iconv("UTF-8", "ASCII//ИГНОРИРОВАТЬ//ТРАНСЛИТ" , $text[0]);
// В документации сказано, что iconv() возвращает false в случае ошибки, но возвращает ''
if ( $text === '' || ! is_string ( $text )) $text = '?' ;
>
elseif ( preg_match ( '/\w/' , $text )) < // Если текст содержит какие-либо буквы.
$text = preg_replace ('/\W+/', '', $text); // . затем удалите все небуквенные
>
>
else < // $text не является строкой
$text = '' ;
>
возврат $text ;
>
>
>
Могут возникнуть ситуации, когда новая версия веб-сайта, полностью в UTF-8, должна отображать некоторые старые данные, оставшиеся в базе данных, с акцентами ISO-8859-1. Проблема заключается в том, что iconv("ISO-8859-1", "UTF-8", $string) не следует применять, если $string уже имеет кодировку UTF-8.
Я использую эту функцию, которая не нуждается в расширении:
Я еще не тестировал его, надеюсь, он поможет.
Я использовал iconv для преобразования cp1251 в UTF-8. Я потратил день, чтобы выяснить, почему строка с русской заглавной "Р" (по звучанию похожа на "р") в конце не может быть вставлена в базу данных.
Хотя это и не баг iconv, но очень похоже. Вот почему я разместил этот комментарий здесь.
Вот пример преобразования строки в кодировке Windows-1251 (Windows) или cp1251 (Linux/Unix) в кодировку UTF-8.
функция cp1251_utf8 ($sInput)
$sOutput = "";
for ( $i = 0 ; $i strlen ( $sInput ); $i ++ )
$iAscii = ord ( $sInput [ $i ] );
Читайте также: