Программа позволяет перекодировать текстовые файлы из кодировки UTF-8 в кодировку Windows-1251, а также добавлять маркер UTF-8, если его нет. | Автор статьи: romix | Редакторы: Последняя редакция №3 от 03.07.07 | История URL: http://kb.mista.ru/article.php?id=481 |
Ключевые слова: кодировка, utf-8, windows-1251, windows
http://x-romix.narod.ru/UTF8_1251.rar
(скачивать ЛЕВОЙ кнопкой мыши, 24К)
Пример вызова:
utf8_1251.exe test_utf8.xml test.xml
Программа изменяет объявление кодировки в первой строке XML.
Перекодирование из Windows-1251 в UTF-8
Перекодирует XML-файл из кодировки Windows-1251 в UTF8.
Если файл уже в кодировке UTF8, то он остается как есть.
Если файл не содержит маркера кодировки UTF8, то добавляет его.
Вызов win1251_utf8.exe Файл1.xml Файл2.xml
Добавление маркера в UTF-8
Используйте ту же самую программу win1251_utf8.exe для добавления маркера UTF-8.
Если кодировка уже была UTF-8, и был маркер, то файл не изменится.
smaharbA пишет:
9 — 28.02.07 — 21:52
//******************************************* Процедура Сформировать() Стрим = СоздатьОбъект("Adodb.Stream"); Стрим.Type = 2; Стрим.Mode= 3; Стрим.charset="utf-16"; //Стрим.charset="windows-1251"; Стрим.Open(); Стрим.WriteText("Проверочка"); Стрим.SaveToFile("c:unicode.txt",2); Стрим.Close(); Стрим.charset="koi8-r"; Стрим.Open(); Стрим.WriteText("Проверочка"); Стрим.Close(); Стрим.charset="utf-8"; Стрим.Open(); Стрим.WriteText("Проверочка"); Стрим.SaveToFile("c:utf-8.txt",2); Стрим.Close(); КонецПроцедуры
Кодировка текста – это схема нумерации символов, в которой каждому символу, цифре или знаку присвоено соответствующее число. Кодировку используют для сохранения и обработки текста на компьютере. Каждый раз при сохранении текста в файл он сохраняется с использованием определенной схемы кодирования, и при открытии этого файла необходимо использовать такую же схему, иначе восстановить исходный текст не получится. Самыми популярными кодировками для кириллицы сейчас являются 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++ позволяет изменить текущую кодировку текста на ANSI (Windows-1251), UTF-8, UTF-8 BOM, UTF-8 BE BOM, UTF-8 LE BOM.
После преобразования файл нужно сохранить с помощью меню «Файл – Сохранить» или комбинации клавиш Ctrl-S.
Akelpad
Akelpad (скачать) – достаточно старая программа для работы с текстовыми файлами, которая все еще актуальна и может быть полезной. Фактически Akelpad является более продвинутой версией стандартной программы Блокнот из Windows. С его помощью можно открывать текстовые файлы большого размера, которые не открываются в Блокноте, выполнять поиск и замену с использованием регулярных выражений и менять кодировку текста.
Для того чтобы изменить кодировку текста с помощью Akelpad файл нужно открыть в данной программе. Если после открытия файла текст не читается, то нужно воспользоваться меню «Файл – Открыть».
В открывшемся окне нужно выделить текстовый файл, снять отметку «Автовыбор» и выбрать подходящую кодировку из списка. При этом в нижней части окна можно видеть, как будет отображаться текст.
Для того чтобы изменить текущую кодировку текста нужно воспользоваться меню «Файл – Сохранить как» и сохранить документ с указанием новой схемы кодирования.
В отличие от Notepad++, текстовый редактор Akelpad позволяет сохранить файл в практически любой кодировке. В частности, доступны Windows 1251, DOS 886, UTF-8 и многие другие.
Посмотрите также:
- Чем открыть PDF файл в Windows 7 или Windows 10
- Как перевернуть страницу в Word
- Как копировать текст с помощью клавиатуры
- Как сделать рамку в Word
- Как сделать буклет в Word
Автор
Александр Степушин
Создатель сайта comp-security.net, автор более 2000 статей о ремонте компьютеров, работе с программами, настройке операционных систем.
Остались вопросы?
Задайте вопрос в комментариях под статьей или на странице
«Задать вопрос»
и вы обязательно получите ответ.
Dogarik 0 / 0 / 0 Регистрация: 21.04.2015 Сообщений: 35 |
||||
1 |
||||
05.12.2019, 15:47. Показов 7513. Ответов 5 Метки xml (Все метки)
Доброго времени суток. Столкнулся с проблемой. Не могу при создании XML файла сменить кодировку. Суть задачи следующая. Есть список в TXT файле из которого необходимо создать XML определенной структуры с кодировкой «Windows-1251». Не знаю как при создании файла установить нужную мне кодировку. Все время устанавливается «utf-8». P.S. Работаю в VS2019.
Миниатюры
__________________
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 |
|||||||||||
К сожалению не помогло.
но эффекта никакого….ну или я криворук… Текущий код такой
На выходе:
0 |
dazering 92 / 62 / 31 Регистрация: 22.12.2018 Сообщений: 121 |
||||||||
05.12.2019, 17:09 |
4 |
|||||||
РешениеDogarik, вот так надо декларировать =)
Если на фрейморке, то ничего не надо делать. Если на коре, то надо добавить NuGet пакет System.Text.Encoding.CodePages и затем прописать
1 |
Ourn 68 / 38 / 11 Регистрация: 07.11.2019 Сообщений: 136 |
||||||||
05.12.2019, 17:12 |
5 |
|||||||
Не обещаю, что поможет, но можно попробовать сделать так 1. Устанавливаете nuget пакет System.Text.Encoding.CodePages — без него не будут доступны кодировки типа 1251.
3. Привожу пример метода, который мне лень переделывать под запись в файл — его задача сформировать строку в нужной кодировке
1 |
0 / 0 / 0 Регистрация: 21.04.2015 Сообщений: 35 |
|
06.12.2019, 17:36 [ТС] |
6 |
Действительно, работаю в Core 2.1. Сделал все, как подсказали dazering и Ourn. Сработало. Премного благодарен за потраченное время))) P.S. Задача решена. Тему можно закрывать.
0 |
При записи изменений в XML документ
<data>
<country name="Liechtenstein">
<rank updated="yes">Москва</rank>
<year>2008</year>
<gdppc>141100</gdppc>
<neighbor name="Austria" direction="E"/>
<neighbor name="Switzerland" direction="W"/>
</country>
<country name="Singapore">
<rank updated="yes">Санкт-Петербург</rank>
<year>2011</year>
<gdppc>59900</gdppc>
<neighbor name="Malaysia" direction="N"/>
</country>
<country name="Panama">
<rank updated="yes">Новосибирск</rank>
<year>2011</year>
<gdppc>13600</gdppc>
<neighbor name="Costa Rica" direction="W"/>
<neighbor name="Colombia" direction="E"/>
</country>
с помощью метода
tree.write('output.xml')
слетает кириллица,
from xml.dom.minidom import *
import xml.etree.ElementTree as ET
import ConfigParser
conf = ConfigParser.RawConfigParser()
conf.read('C:config.conf')# Путь до файла указывается в конфиге
path = conf.get('Path:', 'path')
xml2 = parse(path)
tree = ET.parse(path)
root = tree.getroot()
i = 1
for rank in root.iter('rank'):
if i in [1]:
new_rank = 'Москва'
rank.text = str(new_rank)
rank.set('updated', 'yes')
i += 1
tree.write(path)
строчка
?xml version=»1.0″ encoding=»WINDOWS-1251″ standalone=»true»?>
в начале документа удаляется. Документ открываю в Notpade++ в нём и работаю.
задан 19 июл 2019 в 13:19
Varg SiegVarg Sieg
1,1502 золотых знака13 серебряных знаков35 бронзовых знаков
4
Для того, чтобы при сохранении XML в файл добавлялась строчка <?xml version="1.0" ...
нужно в метод write передавать флаг xml_declaration
:
...
tree.write(path, xml_declaration=True)
В этом же методе можно указать название кодировки, что будет записана в декларации XML:
...
tree.write(path, encoding='WINDOWS-1251', xml_declaration=True)
ответ дан 22 июл 2019 в 7:24
gil9redgil9red
75.2k5 золотых знаков49 серебряных знаков113 бронзовых знаков
Здравствуйте, господа!
Честно говоря, не знаю, кому может пригодиться …
Мне надо было генерировать (для заказчика) и читать (от заказчика) XML в кодовой таблице Window-1251.
1. Опишем русскую кодировку в CPXML.Inc
Код: Выделить всё
XMLEnc EQUATE(STRING)
XMLEnc:UTF8 EQUATE('UTF-8')
XMLEnc:UTF16 EQUATE('UTF-16')
XMLEnc:ISO88591 EQUATE('ISO-8859-1')
XMLEnc:WIN1251 EQUATE('WINDOWS-1251')
2. И заставим выводить данные в windows-1251 (CpXML.clw)
DOMToXMLFile procedure(*Document doc, string path, <*CSTRING newLine>, UNSIGNED Format = Format:AS_IS)
Код: Выделить всё
ret BYTE
CODE
IF omitted(3)
!ret=DOMToXMLFile(doc,path,,Format,XMLEnc:UTF8)
ret=DOMToXMLFile(doc,path,,Format,XMLEnc:WIN1251)
ELSE
!ret=DOMToXMLFile(doc,path,newLine,Format,XMLEnc:UTF8)
ret=DOMToXMLFile(doc,path,newLine,Format,XMLEnc:WIN1251)
END
RETURN ret
3. После чего получим XML-файл (например, в ExampleXMLParse) в кодировке Windows-1251, вполне отображаемый браузером. Но встаёт другая проблема — эти файлы не читаются кларионовским парсером (Шаблон ‘View XML File’ просто падает при загрузке). Ну что ж, тем хуже для парсера. Возьмём шестнадцатеричный редактор, найдём в модуле C60cpxml.dll текст ‘ISO-8859-1’, заменим на ‘WINDOWS-1251’ и добавим в конец ‘<0>’ .
4. Вопрос с документами в UTF-8 не рассматривается
—————————————
C уважением,
Юрий Философов,
Главный программист
Корпорация «Диполь», Саратов
E-mail yufil@tacis-dipol.ru (служ)
yufil@mail.ru (дом)
ICQ#75924439
(Добавление)
Когда-то мне пришлось более плотнее исследовать C6 XML Support. Сделал точно такие же изменения как Вы.
3. После чего получим XML-файл (например, в ExampleXMLParse) в кодировке Windows-1251, вполне отображаемый браузером.
Когда получил этот результат — обрадовался. Но попробовал, используя их классы создать свой XML, и очень разочаровался. Оказывается, классы напрочь отказываются работать с русскими тегами.
Но встаёт другая проблема — эти файлы не читаются кларионовским парсером (Шаблон ‘View XML File’ просто падает при загрузке). Ну >что ж, тем хуже для парсера.
Может проблема в кодовой странице, о которой писал Сергей Артюшенков.
Возьмём шестнадцатеричный редактор, найдём в модуле C60cpxml.dll текст ‘ISO-8859-1’, заменим на ‘WINDOWS-1251’ и добавим в конец ‘<0>’ .
Я не понял, тогда в этом случае все O’K, что ли?
С уважением, Семен Попов
Когда получил этот результат — обрадовался. Но попробовал, используя их классы создать свой XML, и очень разочаровался. Оказывается, классы напрочь отказываются работать с русскими тегами.
Пофиксил. Теперь работают
Когда получил этот результат — обрадовался. Но попробовал, используя их классы создать свой XML, и очень разочаровался. Оказывается, классы напрочь отказываются работать с русскими тегами.
А за это отвечает процедура CheckXMLName из CpXML.clw . Можно поставить в первую строку Return(0) — и будут приниматься любые теги
—————————————
C уважением,
Юрий Философов
Спасибо, попробую.
С уважением, Семен Попов
Когда-то мне пришлось более плотнее исследовать C6 XML Support. Сделал точно такие же изменения как Вы.
Это естественно. Но сгенерированные файлы не читались через Support. Потратил время, чтобы понять причину и добить, как заставить их читаться. О чём и рассказал
Я не понял, тогда в этом случае все O’K, что ли?
По крайней мере, файлы, созданные обычным текстовым редактором или сформированные программой (в том числе без использования интерфейса) читаются, только и всего. Просто похоже, что используемая библиотека в принципе не поддерживает кодировок, отличных от буржуинских, а это самый простой путь заставить это делать…
… исправленные модули для CW6.1 на http://www.tacis-dipol.ru/fil/XML1251.zip
—————————————
C уважением,
Юрий Философов
Написал: ClaList(2)
-
-
October 1 2009, 02:40
- IT
- Cancel
Здравствуйте, помогите пожалуйста разобраться в следующей ситуации:
есть xml файл в кодировке windows-1251 и у него в заголовке это тоже указано(encoding=»windows-1251″). Файл считывается, узлы, атрибуты и т.д. получаются, затем я меняю некоторые атрибуты и сохраняю измененный xml файл. В итоге, он сохраняются в кодировке UTF-8 но в заголовке xml файла по прежнему стоит windows-1251.
Так вот, как сохранить xml в кодировке windows-1251 или как сделать так, чтобы в заголовке стояло UTF-8 ?
\Исходный xml считывается примерно так:
DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
builder = factory.newDocumentBuilder();
Document
doc = builder.parse(new File(«name.xml»));
\здесь файл меняется
….
….
\а тут сохраняю измененный файл
Transformer t = TransformerFactory.newInstance().newTransformer();
StreamResult sr = new StreamResult(new FileOutputStream(new File(«edited.xml»)));
t.transform(new DOMsource(
doc ), sr);
спасибо