Как изменить кодировку xml файла с utf 8 на windows 1251

Проблема кодировок часто возникает при написании парсеров, чтении данных из xml и CSV файлов. Ниже представлены способы эту проблему решить.

windows-1251 в UTF-8

UTF-8 в windows-1251

Когда ни что не помогает

Иногда доходит до бреда, но работает:

File_get_contents / CURL

Ещё бывают случаи, когда file_get_contents() возвращает текст в виде:

Это сжатый текст в GZIP, т.к. функция не отправляет правильные заголовки. Решение проблемы через CURL:

Как изменить кодировку файла xml с utf 8 на windows 1251

Чтобы правильно отображать и редактировать файлы, 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 соответствует É.

Юникод: единый стандарт кодирования для многих алфавитов

Чтобы избежать проблем с кодированием и декодированием текстовых файлов, вы можете сохранять файлы в кодировке Unicode. Юникод поддерживает большинство наборов символов для всех языков, которые сегодня широко используются пользователями компьютеров.

Поскольку Word основан на Unicode, Word автоматически сохраняет файлы, закодированные как Unicode. Вы можете открывать и читать файлы в кодировке Unicode на своем англоязычном компьютере независимо от языка текста. Аналогичным образом, когда вы используете англоязычную систему для сохранения файлов в кодировке Unicode, файл может содержать символы, отсутствующие в западноевропейских алфавитах, например символы греческого, кириллического, арабского или японского языков.

Выберите стандарт кодирования при открытии файла

Если при открытии файла текст отображается искаженным, в виде вопросительных знаков или прямоугольников, возможно, Word не точно определил стандарт кодирования текста в файле. Вы можете указать стандарт кодирования, который можно использовать для отображения (декодирования) текста.

Перейдите на вкладку «Файл».

Прокрутите до раздела «Общие» и установите флажок «Подтверждать преобразование формата файла при открытии».

Примечание. Если этот флажок установлен, Word отображает диалоговое окно «Преобразовать файл» каждый раз, когда вы открываете файл в формате, отличном от формата Word (форматы Word включают .doc, .dot, .docx, .docm, . файлы dotx или .dotm). Если вы часто работаете с такими файлами, но редко хотите выбирать стандарт кодирования, не забудьте отключить этот параметр, чтобы это диалоговое окно не открывалось без необходимости.

Закройте и снова откройте файл.

В диалоговом окне «Преобразовать файл» выберите «Закодированный текст».

В диалоговом окне «Преобразование файла» выберите «Другая кодировка», а затем выберите нужный стандарт кодировки из списка.

Вы можете предварительно просмотреть текст в области предварительного просмотра, чтобы проверить, читается ли весь текст в выбранном стандарте кодирования.

Если почти весь текст выглядит одинаково (например, все прямоугольники или все точки), возможно, не установлен шрифт, необходимый для отображения символов. Если нужный вам шрифт недоступен, вы можете установить дополнительные шрифты.

Чтобы установить дополнительные шрифты, выполните следующие действия:

В Microsoft Windows нажмите кнопку «Пуск» и выберите «Панель управления».

Выполните одно из следующих действий:

На панели управления нажмите «Удалить программу».

В списке программ выберите 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; 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)

>

затем после отображения вы используете $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)

еще

$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 ))
>
else
возврат $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 ] );

Как изменить кодировку xml файла с utf 8 на windows 1251

Мне надо было генерировать (для заказчика) и читать (от заказчика) XML в кодовой таблице Window-1251.

1. Опишем русскую кодировку в CPXML.Inc

2. И заставим выводить данные в windows-1251 (CpXML.clw)

DOMToXMLFile procedure(*Document doc, string path, <*CSTRING newLine>, UNSIGNED Format = Format:AS_IS)

3. После чего получим XML-файл (например, в Example\XMLParse) в кодировке Windows-1251, вполне отображаемый браузером. Но встаёт другая проблема — эти файлы не читаются кларионовским парсером (Шаблон ‘View XML File’ просто падает при загрузке). Ну что ж, тем хуже для парсера. Возьмём шестнадцатеричный редактор, найдём в модуле C60cpxml.dll текст ‘ISO-8859-1’, заменим на ‘WINDOWS-1251’ и добавим в конец ‘<0>’ .

4. Вопрос с документами в UTF-8 не рассматривается

Когда-то мне пришлось более плотнее исследовать C6 XML Support. Сделал точно такие же изменения как Вы.

3. После чего получим XML-файл (например, в Example\XMLParse) в кодировке Windows-1251, вполне отображаемый браузером. Когда получил этот результат — обрадовался. Но попробовал, используя их классы создать свой XML, и очень разочаровался. Оказывается, классы напрочь отказываются работать с русскими тегами.
Но встаёт другая проблема — эти файлы не читаются кларионовским парсером (Шаблон ‘View XML File’ просто падает при загрузке). Ну >что ж, тем хуже для парсера. Может проблема в кодовой странице, о которой писал Сергей Артюшенков.
Возьмём шестнадцатеричный редактор, найдём в модуле C60cpxml.dll текст ‘ISO-8859-1’, заменим на ‘WINDOWS-1251’ и добавим в конец ‘<0>’ .

Я не понял, тогда в этом случае все O’K, что ли?

С уважением, Семен Попов

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

А за это отвечает процедура CheckXMLName из CpXML.clw . Можно поставить в первую строку Return(0) — и будут приниматься любые теги

С уважением, Семен Попов

Когда-то мне пришлось более плотнее исследовать C6 XML Support. Сделал точно такие же изменения как Вы. Это естественно. Но сгенерированные файлы не читались через Support. Потратил время, чтобы понять причину и добить, как заставить их читаться. О чём и рассказал

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

Кстати, вместо «WINDOWS-1251» можно использовать «MS1251» — такой синтаксис тоже понимают все системы.
Этим самым экономится длина строки (ISO-8859-1 — 10 знаков, WINDOWS-1251 — 12 знаков) при бинарном рпедактировании.

Увы, это строка проверяется при вводе, а не выводе Поэтому приходится пожертвовать следующим полем — US-ASCII .

Ну, у Клариона я не проверял, к сожалению.
У меня был аналогичный случай по основной работе (программные продукты Documentum).
Мы тоже очень долго мучились с проблемой замены в бинарном файле «ISO_8859-1» на название русской кодировки. Мучились как раз из-за ттго, что нужно было уложиться «байт в байт». Проверяли все возможные варианты синтаксиса (кстати, кроме «Windows-1251» еще есть варианты «1251», «CP-1251», «ANSI-1251» и другие).
В итоге долгих экспериментов выяснилось, что «MS1251» читается даже, например, Интернет-Эксплорером.
Собственно говоря, можете проверить — замените в метатеге какой-нибудь HTML-страницы «Windows-1251» на «MS1251» — бедет работать.

Да речь не о Кларионе. Просто для создания DLL использовалась некая сишная библиотека. А в ней есть список допустимый кодовых таблиц, и Windows-1251 в ней НЕТ. Происходит чтение XML и поиск наименования кодовой страницы в списке. Ещё раз — это важно при ЧТЕНИИ XML-файла через кларионовский Support.

И если файл начинается на

,
то именно ‘WINDOWS-1251’ и должен быть в программе. Собственно, путём двухдневных хакерских «экспериментов» и был найден такой вариант.
Возможно, что можно подменить и другие текстовые строки. Кто займётся?

Кстати, попробовал CP-1251 и MS1251, браузер показал ошибку . Файл прилагается.

А вот список кодовых таблиц кириллицы из MSDN

Кстати, попробовал CP-1251 и MS1251, браузер показал ошибку .
Файл прилагается.

Действительно, выдает ошибку.
Получается, что для обычного HTML это работает, а для XML — нет.
Ну, Билл Гейтс — все запутал!

Как поправить кодировку в XML документе?

в начале документа удаляется. Документ открываю в Notpade++ в нём и работаю.

Varg Sieg's user avatar

Для того, чтобы при сохранении XML в файл добавлялась строчка <?xml version=»1.0″ . нужно в метод write передавать флаг xml_declaration :

В этом же методе можно указать название кодировки, что будет записана в декларации XML:

Дизайн сайта / логотип © 2023 Stack Exchange Inc; пользовательские материалы лицензированы в соответствии с CC BY-SA . rev 2023.9.7.43618

Нажимая «Принять все файлы cookie» вы соглашаетесь, что Stack Exchange может хранить файлы cookie на вашем устройстве и раскрывать информацию в соответствии с нашей Политикой в отношении файлов cookie.

Кодировка текста – это схема нумерации символов, в которой каждому символу, цифре или знаку присвоено соответствующее число. Кодировку используют для сохранения и обработки текста на компьютере. Каждый раз при сохранении текста в файл он сохраняется с использованием определенной схемы кодирования, и при открытии этого файла необходимо использовать такую же схему, иначе восстановить исходный текст не получится. Самыми популярными кодировками для кириллицы сейчас являются UTF-8, Windows-1251 (CP1251, ANSI).

Для того чтобы программа смогла правильно открыть текстовый файл, иногда приходится вручную менять кодировку, перекодируя текст из одной схемы в другую. Например, не редко возникают проблемы с открытием файлов CSV, XML, SQL, TXT, PHP.

В этой небольшой статье мы расскажем о том, как изменить кодировку текстового файла на UTF-8, Windows-1251 или любую другую.

Блокнот Windows

Если вы используете операционную систему Windows 10 или Windows 11, то вы можете изменить кодировку текста с помощью стандартной программы Блокнот. Для этого нужно открыть текстовый файл с помощью Блокнота и воспользоваться меню «Файл – Сохранить как».

меню Файл – Сохранить как

В открывшемся окне нужно указать новое название для файла, выбрать подходящую кодировку и нажать на кнопку «Сохранить».

изменить кодировку в Блокноте

К сожалению, для подобных задач программа Блокнот часто не подходит. С ее помощью нельзя открывать документы большого размера, и она не поддерживает многие кодировки. Например, с помощью Блокнота нельзя открыть текстовые файлы в DOS 866.

Notepad++

Notepad++ (скачать) является одним из наиболее продвинутых текстовых редакторов. Он обладает подсветкой синтаксиса языков программирования, позволяет выполнять поиск и замену по регулярным выражениям, отслеживать изменения в файлах, записывать и воспроизводить макросы, считать хеш-сумы и многое другое. Одной из основных функций Notepad++ является поддержка большого количества кодировок текста и возможность изменения кодировки текстового файла в UTF-8 или Windows 1251.

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

выбрать кодировку в Notepad++

После открытия текста можно изменить его кодировку. Для этого нужно открыть меню «Кодировки» и выбрать один из вариантов преобразования. Notepad++ позволяет изменить текущую кодировку текста на ANSI (Windows-1251), UTF-8, UTF-8 BOM, UTF-8 BE BOM, UTF-8 LE BOM.

изменить кодировку в Notepad++

После преобразования файл нужно сохранить с помощью меню «Файл – Сохранить» или комбинации клавиш Ctrl-S.

Akelpad

Akelpad (скачать) – достаточно старая программа для работы с текстовыми файлами, которая все еще актуальна и может быть полезной. Фактически Akelpad является более продвинутой версией стандартной программы Блокнот из Windows. С его помощью можно открывать текстовые файлы большого размера, которые не открываются в Блокноте, выполнять поиск и замену с использованием регулярных выражений и менять кодировку текста.

Для того чтобы изменить кодировку текста с помощью Akelpad файл нужно открыть в данной программе. Если после открытия файла текст не читается, то нужно воспользоваться меню «Файл – Открыть».

открыть файл в Akelpad

В открывшемся окне нужно выделить текстовый файл, снять отметку «Автовыбор» и выбрать подходящую кодировку из списка. При этом в нижней части окна можно видеть, как будет отображаться текст.

выбрать кодировку в Akelpad

Для того чтобы изменить текущую кодировку текста нужно воспользоваться меню «Файл – Сохранить как» и сохранить документ с указанием новой схемы кодирования.

изменить кодировку в Akelpad

В отличие от Notepad++, текстовый редактор Akelpad позволяет сохранить файл в практически любой кодировке. В частности, доступны Windows 1251, DOS 886, UTF-8 и многие другие.

Посмотрите также:

  • Чем открыть PDF файл в Windows 7 или Windows 10
  • Как перевернуть страницу в Word
  • Как копировать текст с помощью клавиатуры
  • Как сделать рамку в Word
  • Как сделать буклет в Word

Автор
Александр Степушин

Создатель сайта comp-security.net, автор более 2000 статей о ремонте компьютеров, работе с программами, настройке операционных систем.

Остались вопросы?

Задайте вопрос в комментариях под статьей или на странице
«Задать вопрос»
и вы обязательно получите ответ.

Изменение кодировки xml файла может быть необходимым, если вы сталкиваетесь с проблемами отображения или обработки данных на разных системах или программах. Кодировка utf-8 является широко используемой и универсальной, однако некоторые программы или системы могут требовать кодировку windows-1251.

В этой статье будет представлена пошаговая инструкция о том, как изменить кодировку xml файла с utf-8 на windows-1251. Все шаги будут рассмотрены детально, чтобы вы могли легко выполнить эту операцию.

Шаг 1: Откройте xml файл с помощью текстового редактора, такого как Notepad++, Sublime Text или любого другого редактора, который поддерживает работу с различными кодировками.

Шаг 2: В редакторе найдите строку, которая содержит объявление кодировки xml файла. Обычно она выглядит следующим образом:

<?xml version=»1.0″ encoding=»utf-8″ ?>

Шаг 3: Замените «utf-8» на «windows-1251» в строке объявления кодировки:

<?xml version=»1.0″ encoding=»windows-1251″ ?>

Шаг 4: Сохраните изменения в файле.

Поздравляю! Вы успешно изменили кодировку xml файла с utf-8 на windows-1251. Теперь файл будет отображаться и обрабатываться корректно в программе или системе, которая требует данную кодировку.

Содержание

  1. Как изменить кодировку xml файла
  2. Переход на кодировку windows 1251
  3. Пошаговая инструкция
  4. Шаг 1: Открыть xml файл
  5. Шаг 2: Установить кодировку utf 8
  6. Шаг 3: Сохранить файл с кодировкой windows 1251
  7. Вопрос-ответ
  8. Могу ли я потерять данные при изменении кодировки xml файла?

Как изменить кодировку xml файла

Иногда возникает необходимость изменить кодировку xml файла для совместимости с другими программными инструментами или системами. В данной инструкции рассматривается способ изменения кодировки с utf-8 на windows-1251.

  1. Откройте XML файл. Используйте текстовый редактор, такой как Notepad++ или Sublime Text, чтобы открыть целевой XML файл. Убедитесь, что редактор поддерживает кодировку windows-1251.
  2. Сохраните файл в новой кодировке. В меню вашего текстового редактора найдите опцию «Сохранить как» или «Save As». Выберите файловый формат XML и укажите новое имя для сохраненного файла. Настройте кодировку на windows-1251.
  3. Измените заголовок XML файла. Откройте сохраненный XML файл в текстовом редакторе и найдите строку с заголовком XML. Она может выглядеть примерно так: <?xml version="1.0" encoding="utf-8" ?>. Замените «utf-8» на «windows-1251». Сохраните изменения.
  4. Проверьте результат. Откройте измененный XML файл и убедитесь, что содержимое отображается корректно. Проверьте, что все символы и текст сохранены без искажений.

Обратите внимание, что изменение кодировки XML файла может повлиять на работу программного обеспечения или системы, использующей этот файл. Убедитесь, что вы совместимы с новой кодировкой.

Важно также отметить, что данная инструкция применима только к XML файлам и изменение кодировки других форматов файлов может потребовать других инструментов или подходов.

Переход на кодировку windows 1251

Кодировка windows 1251 является одной из самых популярных для работы с русским языком. Если у вас есть XML файл, который был сохранен в кодировке utf-8, и вы хотите перекодировать его в кодировку windows 1251, следуйте следующим шагам:

  1. Откройте файл в редакторе кода или специализированном редакторе XML.
  2. Сохраните копию файла под новым именем, чтобы сохранить оригинальный файл без изменений.
  3. Найдите декларацию кодировки <?xml version=»1.0″ encoding=»utf-8″?> в начале файла.
  4. Замените значение encoding на «windows-1251». Новая декларация кодировки должна выглядеть так: <?xml version=»1.0″ encoding=»windows-1251″?>.
  5. Сохраните измененный файл.

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

Пошаговая инструкция

Если вам нужно изменить кодировку XML файла с UTF-8 на Windows-1251, следуйте этой пошаговой инструкции:

  1. Откройте XML файл с UTF-8 кодировкой в текстовом редакторе, например, в Notepad++.
  2. Найдите заголовок XML документа, который выглядит примерно так:
  3. <?xml version="1.0" encoding="UTF-8"?>
  4. Замените «UTF-8» на «Windows-1251», чтобы получился следующий заголовок:
  5. <?xml version="1.0" encoding="Windows-1251"?>
  6. Сохраните изменения в XML файле.
  7. Теперь ваш XML файл имеет кодировку Windows-1251.

Обратите внимание, что при изменении кодировки могут возникнуть проблемы с отображением некоторых символов или специальных символов, если они не поддерживаются в выбранной кодировке. Убедитесь, что ваш XML файл отображается корректно после изменения кодировки.

Шаг 1: Открыть xml файл

Перед тем, как изменить кодировку xml файла на Windows 1251, необходимо открыть файл в текстовом редакторе или специализированной программе для редактирования xml.

Вы можете использовать любой текстовый редактор, такой как Notepad++, Sublime Text или Atom, или же специализированную программу для редактирования xml, например, XMLSpy или Oxygen XML Editor.

Вам понадобится найти и выбрать тот xml файл, кодировку которого вы хотите изменить.

Обратите внимание, что некоторые программы автоматически распознают кодировку xml файла и отображают его в правильной кодировке. Если ваша программа автоматически отображает файл в кодировке Windows 1251, то вам не потребуется производить дополнительные действия. Проверьте кодировку файла, чтобы быть уверенным в текущей кодировке.

Шаг 2: Установить кодировку utf 8

После того, как вы открыли XML файл в текстовом редакторе, нужно убедиться, что кодировка файла установлена как UTF-8. Это важно, потому что кодировка определяет, как компьютер будет интерпретировать и отображать символы в файле.

Чтобы проверить или изменить кодировку файла, выполните следующие действия:

  1. Найдите строку, которая обычно выглядит как <?xml version=»1.0″ encoding=»UTF-8″ ?>.
  2. Убедитесь, что значение параметра encoding установлено на UTF-8. Если оно не соответствует, измените его на UTF-8.
  3. Сохраните файл после внесения изменений.

Теперь ваш XML файл использует кодировку UTF-8, что позволяет корректно отображать различные символы и символические ссылки в тексте.

Шаг 3: Сохранить файл с кодировкой windows 1251

После того как вы открыли xml файл в текстовом редакторе и определили, что он имеет кодировку UTF-8, вам понадобится сохранить его с новой кодировкой windows 1251. Следуйте инструкциям ниже, чтобы выполнить этот шаг:

  1. Нажмите на меню «Файл» в верхней панели редактора.
  2. В выпадающем меню выберите опцию «Сохранить как…» или «Сохранить файл как…».
  3. В диалоговом окне выберите место, куда хотите сохранить файл, укажите имя файла и добавьте расширение «.xml» (если оно еще не указано).
  4. Найдите поле, где можно выбрать кодировку для файла, и выберите «Windows-1251» из списка. Обратите внимание, что поле может называться по-разному в разных редакторах, но обычно оно находится рядом с полем выбора имени файла.

  5. Нажмите кнопку «Сохранить» или «ОК», чтобы сохранить файл с кодировкой windows 1251.

Поздравляю, вы успешно сохранели файл с новой кодировкой! Теперь ваш xml файл будет в формате windows 1251 и готов к использованию.

Вопрос-ответ

Могу ли я потерять данные при изменении кодировки xml файла?

При изменении кодировки xml файла с utf 8 на windows 1251 существует риск потери данных, особенно если в файле содержатся символы, которые не поддерживаются новой кодировкой. Поэтому рекомендуется создать резервную копию файла перед изменением кодировки и внимательно проверить результат после сохранения файла с новой кодировкой. Если в результате изменения кодировки xml файла данные стали некорректными или непонятными, можно вернуться к резервной копии и попробовать другой способ изменения кодировки или использовать другой текстовый редактор.

Для изменения кодировки XML файла с UTF-8 на Windows-1251 можно использовать различные инструменты. Ниже приведены два метода, которыми можно воспользоваться.

1. Использование текстового редактора:
— Откройте XML файл с UTF-8 кодировкой в текстовом редакторе, например, блокноте.
— Сохраните файл как новый файл с кодировкой Windows-1251.
— Выполните сохранение файла.

2. Использование инструментов командной строки:
— Откройте командную строку.
— Перейдите к папке, где находится XML файл.
— Введите команду в следующем формате:

`iconv — f UTF-8 — t WINDOWS-1251 input. xml > output. xml`

В этом случае input. xml — это имя файла с кодировкой UTF-8, который вы хотите изменить, output. xml — это имя файла, куда будет сохранен XML файл с кодировкой Windows-1251.
— Нажмите ввод, чтобы выполнить команду.
— Проверьте, что новый файл содержит XML с новой кодировкой.

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

Dogarik

0 / 0 / 0

Регистрация: 21.04.2015

Сообщений: 35

1

05.12.2019, 15:47. Показов 20497. Ответов 5

Метки xml (Все метки)


Студворк — интернет-сервис помощи студентам

Доброго времени суток. Столкнулся с проблемой. Не могу при создании XML файла сменить кодировку.

Суть задачи следующая. Есть список в TXT файле из которого необходимо создать XML определенной структуры с кодировкой «Windows-1251». Не знаю как при создании файла установить нужную мне кодировку. Все время устанавливается «utf-8».
Буду благодарен любому совету.

P.S. Работаю в VS2019.

C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
class Program
    {
        static void Main(string[] args)
        {
            List<HumanData> HumanList = new List<HumanData>();
            string PathLoadFile = Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location) + "\\List.txt";
            string FullFileName = "VALIDATION-REQ-50-OBR-01-001.XML";
            string PathSaveFile = Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location) + "\\" + FullFileName;
 
            using (StreamReader stroka = new StreamReader(PathLoadFile, Encoding.Default))
            {
                string str; int index = 0;
                while ((str = stroka.ReadLine()) != null)
                {
                    string[] Fullstroka = str.Split(new char[] { ';' });
                    HumanList.Add(new HumanData()
                    {
                        Id = index,
                        Snils = Fullstroka[0].ToUpper(),
                        Surname = Fullstroka[1].ToUpper(),
                        Name = Fullstroka[2].ToUpper(),
                        Patronymic = Fullstroka[3].ToUpper(),
                        Birthday = Fullstroka[4].ToUpper(),
                        Sex = Fullstroka[5].ToUpper()
                    });
                    index++;
                }
            }
 
            XDocument xdoc = new XDocument();
            XElement DataBlock = new XElement("ФайлПФР");
 
            XElement FileName = new XElement("ИмяФайла", FullFileName);
            DataBlock.Add(FileName);
            XElement CreateDate = new XElement("ДатаФормирования", DateTime.Now.ToString("dd.MM.yyyy").ToUpper());
            DataBlock.Add(CreateDate);
            XElement Version = new XElement("ВерсияФормата", "1.0");
            DataBlock.Add(Version);
            XElement FileType = new XElement("ТипФайла", "ВАЛИДАЦИЯ_ЗАПРОС");
            DataBlock.Add(FileType);
            XElement Count = new XElement("КоличествоЗаписейВфайле", HumanList.Count);
            DataBlock.Add(Count);
 
            foreach(var ASD in HumanList)
            {
                XElement Request = new XElement("Валидация_запрос");
                XElement Id = new XElement("ИдентификаторЗапроса", (ASD.Id + 1).ToString());
                XElement Snils = new XElement("СНИЛС", ASD.Snils);
                XElement Fam = new XElement("Фамилия", ASD.Surname);
                XElement Name = new XElement("Имя", ASD.Name);
                XElement Otch = new XElement("Отчество", ASD.Patronymic);
                XElement Birthday = new XElement("ДатаРождения", ASD.Birthday);
                XElement Sex = new XElement("Пол", ASD.Sex);
                Request.Add(Id); Request.Add(Snils); Request.Add(Fam); Request.Add(Name);
                Request.Add(Otch); Request.Add(Birthday); Request.Add(Sex);
                DataBlock.Add(Request);
            }
 
            xdoc.Add(DataBlock);
            xdoc.Save(PathSaveFile);
        }
 
        public class HumanData
        {
            public int Id { get; set; }
            public string Snils { get; set; }
            public string Surname { get; set; }
            public string Name { get; set; }
            public string Patronymic { get; set; }
            public string Birthday { get; set; }
            public string Sex { get; set; }
        }
    }

Миниатюры

Изменение кодировки создаваемого XML файла
 



0



Programming

Эксперт

94731 / 64177 / 26122

Регистрация: 12.04.2006

Сообщений: 116,782

05.12.2019, 15:47

5

92 / 62 / 31

Регистрация: 22.12.2018

Сообщений: 121

05.12.2019, 15:59

2

Dogarik, нет возможности проверить совет, но попробуйте так



1



Dogarik

0 / 0 / 0

Регистрация: 21.04.2015

Сообщений: 35

05.12.2019, 16:37

 [ТС]

3

К сожалению не помогло.
Сократил немного код, вставил

C#
1
new XDeclaration("1.0", "Windows-1251", "Yes")

но эффекта никакого….ну или я криворук…

Текущий код такой

C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
XDocument xdoc = new XDocument(new XDeclaration("1.0", "Windows-1251", "Yes"));
            XElement DataBlock = new XElement("ФайлПФР",
                new XElement("ИмяФайла", FullFileName),
                new XElement("ДатаФормирования", DateTime.Now.ToString("dd.MM.yyyy").ToUpper()),
                new XElement("ВерсияФормата", "1.0"),
                new XElement("ТипФайла", "ВАЛИДАЦИЯ_ЗАПРОС"),
                new XElement("КоличествоЗаписейВфайле", HumanList.Count));
                                 
            foreach(var ASD in HumanList)
            {
                XElement Request = new XElement("Валидация_запрос",
                new XElement("ИдентификаторЗапроса", (ASD.Id + 1).ToString()),
                new XElement("СНИЛС", ASD.Snils),
                new XElement("Фамилия", ASD.Surname),
                new XElement("Имя", ASD.Name),
                new XElement("Отчество", ASD.Patronymic),
                new XElement("ДатаРождения", ASD.Birthday),
                new XElement("Пол", ASD.Sex));
                DataBlock.Add(Request);
            }
 
            xdoc.Add(DataBlock);
            xdoc.Save(PathSaveFile);

На выходе:

XML
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
<?xml version="1.0" encoding="utf-8"?>
<ФайлПФР>
  <ИмяФайла>VALIDATION-REQ-50-OBR-01-001.XML</ИмяФайла>
  <ДатаФормирования>05.12.2019</ДатаФормирования>
  <ВерсияФормата>1.0</ВерсияФормата>
  <ТипФайла>ВАЛИДАЦИЯ_ЗАПРОС</ТипФайла>
  <КоличествоЗаписейВфайле>1555</КоличествоЗаписейВфайле>
  <Валидация_запрос>
    <ИдентификаторЗапроса>1</ИдентификаторЗапроса>
    <СНИЛС>ХХХ-ХХХ-ХХХ ХХ</СНИЛС>
    <Фамилия>�����</Фамилия>
    <Имя>�������</Имя>
    <Отчество>�������������</Отчество>
    <ДатаРождения>06.11.2012</ДатаРождения>
    <Пол></Пол>
  </Валидация_запрос>



0



dazering

92 / 62 / 31

Регистрация: 22.12.2018

Сообщений: 121

05.12.2019, 17:09

4

Лучший ответ Сообщение было отмечено Dogarik как решение

Решение

Dogarik, вот так надо декларировать =)

C#
1
XDocument xdoc = new XDocument(new XDeclaration("1.0", Encoding.GetEncoding("windows-1251").WebName, ""), new XElement("Root", "Content"));

Если на фрейморке, то ничего не надо делать. Если на коре, то надо добавить NuGet пакет System.Text.Encoding.CodePages и затем прописать

C#
1
            Encoding.RegisterProvider(CodePagesEncodingProvider.Instance);



1



Ourn

68 / 38 / 11

Регистрация: 07.11.2019

Сообщений: 136

05.12.2019, 17:12

5

Не обещаю, что поможет, но можно попробовать сделать так

1. Устанавливаете nuget пакет System.Text.Encoding.CodePages — без него не будут доступны кодировки типа 1251.
2. Создаете кастомный StringWriter

C#
1
2
3
4
5
6
7
8
public sealed class WinStringWriter : StringWriter
{
    public WinStringWriter(StringBuilder builder)
        : base(builder)
    {
    }
    public override Encoding Encoding => Encoding.GetEncoding("windows-1251");
}

3. Привожу пример метода, который мне лень переделывать под запись в файл — его задача сформировать строку в нужной кодировке

C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
public static string ToXmlString(XElement element)
{
    Encoding.RegisterProvider(CodePagesEncodingProvider.Instance); //стоит вынести в main
 
    var xmlWriterSettings = new XmlWriterSettings() 
    {
        Encoding = Encoding.GetEncoding("windows-1251")
    };
 
    var buffer = new StringBuilder();
    using (TextWriter output = new WinStringWriter(buffer))
    using (XmlWriter writer = XmlWriter.Create(output, xmlWriterSettings))
    {
        writer.WriteStartDocument();
 
        element.WriteTo(writer);
 
        writer.WriteEndDocument();
        writer.Flush();
    }
 
    return buffer.ToString();
}



1



0 / 0 / 0

Регистрация: 21.04.2015

Сообщений: 35

06.12.2019, 17:36

 [ТС]

6

Действительно, работаю в Core 2.1.
Не думал, что это важно, при описании проблемы, но теперь буду иметь ввиду.

Сделал все, как подсказали dazering и Ourn. Сработало.

Премного благодарен за потраченное время)))

P.S. Задача решена. Тему можно закрывать.



0



  • Как изменить комбинацию клавиш для смены языка windows 10
  • Как изменить кодек bluetooth наушников windows
  • Как изменить код устройства windows 10
  • Как изменить код продукта windows 10
  • Как изменить кнопку смены раскладки клавиатуры windows 10