✍
Работая над проектом интернет магазина столкнулся, с проблемой кодировки в компонентах движка.Проблема была не в оригинальных файлах магазина, которые как и пологается были в кодировке UTF-8, а во врезаемых модулях которые были в кодировке CP-1251, потому что писались к предыдущим версиям CMS где всё было в кодировке Windows-1251. Кроме этого встретил модули и их модификации где была смешанная кодировка: код в Utf-8, а различные сообщения на кириллице в Cp-1251.
В начале пробовал изменять кодировку при помощи редактора Akelpad, но по неизвестной причине это не смогло решить проблему, да и файлов было довольно много подлежащих к изменению.Возникшею проблему удалось решить при помощи простой и удобной программы
EncodingConverter.Разумеется, наткнулся на эту программу совершенно случайно, перекапывая различные форумы, а до этого попадались другие решение только не подходящие под мою задачу.
Моё Описание программы EncodingConverter
Для запуска программы EncodingConverter,
- открываем одноименный файл EncodingConverter. exe.
- В начале через кнопку обзор выбираем папку с файлами
- Затем в выпадающим списке выбираем новую кодировку.
- UTF-8 без BOM
- UTF-8 с BOM
- UTF-16-Le
- UTF-16-BE
- UTF-32-LE
- UTF-32-BE
- CP-1251
- В поле фильтр, нам нужно дописать те расширение файлов, в которых будем изменять кодировку.
- Перед тем как нажать кнопку начала изменения кодировки, нажмите на кнопку анализировать.
(в которых нужно изменить кодировку), при этом в папке могут содержаться файлы с разными расширениями и разным количеством вложенных папок.Флажок обрабатывать вложенные папки оставляем на месте.
В нашем случае это Cp-1251, но можно по желанию выбрать и такие как:
В поле уже имеется ряд масок, поэтому в начало или конец строки дописываем примерно так: *. php|*. html|*. htm и так далее, разделитель масок — это вертикальная черта.
Вот так всё просто в этой программе, спасибо за это автору.Не забывайте все такие фокусы производить всегда на копиях файлов.
Где скачать EncodingConverter
А скачать эту версию программы EncodingConverter, которую я сам использую можно с моего сайта.[dc]Скачать EncodingConverter[/dc]Размер архива Zip примерно 23 KB.
Поделиться
Если не работает ссылка?
Если вдруг ссылка стала не рабочей, пожалуйста, скопируйте ссылку из адресной строки браузера на эту страницу и отправьте её мне черезФорму обратной связи в теме сообщения выбрав подходящию тему.
Благодарю вас за понимание.
Recoder v3.1.0 (BOM-remover)
github
Небольшая программа для массового (пакетного) перекодирования файлов из одной кодировки в другую. Доступные кодировки windows-1251, koi8-r, cp866, ISO 8859-5, utf-8, utf-8 с BOM-заголовком. Также умеет искать и удалять BOM-заголовок в файлах и каталогах.
Текущая версия: ¶
-
Скачать recoder v3.1.0 для Windows 7+ 64-бит (9.7 MB)
Запускается без установки, не требует дополнительных библиотек.
-
Скачать recoder v3.1.0 для Ubuntu 20.04+ 64-бит (10.8 MB)
Запускается без установки, не требует дополнительных библиотек.
Некоторые антивирусы (например, VirusTotal) могут показывать наличие вирусов в исполняемом файле. Это связано с использованием PyInstaller и его модулей.
Если это является проблемой, то проект можно запускать из исходного кода или использовать версию v2.
Последнее изменение: ¶
- 3 декабря 2022 г. — добавлена галочка «Искать в подкаталогах».
- 5 марта 2022 г. — приложение переписано на Python (tkinter) с публикацией исходного кода.
Предыдущие версии: ¶
- v3.0.0: Windows (9.7 MB), Linux (11 MB)
- v2.3.0: Windows (7.9 MB), Linux (74 kB)
- v2.2.2: Windows (7.9 MB), Linux (67.7 kB)
- v2.2.1: Windows (7.9 MB), Linux (66.5 kB)
- v2.1.1: Windows (7.2 MB), Linux (48.8 kB)
- v2.1: Windows (8.2 MB), Linux (48.5 kB)
- v2.0: Windows (7.9 MB)
Скриншоты ¶
Привет, друзья. Я уже 3 года работаю с вебом, но с таким не встречался еще. В чем суть:
Есть у меня кириллический текст с кодировкой UTF-8 и отображается он нормально.
Мне нужно изменить кодировку на windows-1251 так, чтобы кириллический текст так же нормально читабельно отображался. И вот что-то ну вообще не могу взять в толк, как это сделать?
-
Вопрос задан
-
29626 просмотров
Пригласить эксперта
для большого количества файлов есть однострочник на powershell:
Get-ChildItem folderwithfiles -File | foreach {Get-Content $_.fullname -Encoding UTF8 | Out-File folderwithconvertedfiles\$_ -encoding default}
Одна загвоздка : encoding default — берет кодировку системы.
Проверить что это windows 1251 можно так(powershell) :[System.Text.Encoding]::Default.Codepage
Вы имеете в виду, самостоятельно, а не в программном коде? Тогда с помощью Вашего текстового редактора, которым Вы пользуетесь. Например, если Вы предпочитаете Sublime Text, то просто воспользуйтесь пунктом меню File->Save with encoding > Cyrillic (Windows 1251)
Войдите, чтобы написать ответ
-
Показать ещё
Загружается…
Минуточку внимания
v7: Перекодировка файла из utf8 в 1251
☑
0
zenon46
28.05.24
✎
12:57
Доброго дня!
Столкнулся с проблемой, с сайта прилетает файл в кодировке utf8, данные необходимо загрузить в базу, пытался перекодировать файл через Adodb.Stream, закрывается предприятие, думал файл слишком большой (10 мегабайт), урезал до 8 килобайт, та же история.
Вот собственно код :
АдоДБСтрим = CreateObject(«Adodb.Stream»);
АдоДБСтрим.Charset=»utf-8″;
АдоДБСтрим.Type = 2;
АдоДБСтрим.Mode= 3;
АдоДБСтрим.Open();
АдоДБСтрим.LoadFromFile(КаталогПользователя()+»products.json»);
ТекстАдоДБСтрим = АдоДБСтрим.ReadText();
АдоДБСтрим.Close();
АдоДБСтрим.Charset = «windows-1251»;
АдоДБСтрим.Open();
АдоДБСтрим.WriteText(ТекстАдоДБСтрим);
АдоДБСтрим.SaveToFile(КаталогПользователя()+»products.json», 2);
АдоДБСтрим.Close();
Что не так ?
UPD Падает именно по размеру, с маленьким отрабатывает нормально.
1
Волшебник
28.05.24
✎
12:56
v7 — вот что не так
2
trad
28.05.24
✎
12:58
Загрузка из файла JSON/#16
это уже пробовал?
3
trad
28.05.24
✎
13:01
>>урезал до 8 килобайт, та же история.
>>с маленьким отрабатывает нормально.
показания расходятся
4
zenon46
28.05.24
✎
13:02
(2) с загрузкой все нормально, парсится нормально, вот только из за кодировки в кириллице «грузинский чай».
5
zenon46
28.05.24
✎
13:03
(3) был не внимателен, не тот файл передавал на перекодировку. Думал что работаю с маленьким а передавал ссылку на большой. С маленьким файлом все ок.
6
zenon46
28.05.24
✎
13:05
(3) запросить файл в кодировке 1251 не представляется возможным, те кто делал сайт сказали что нет технической возможности.
7
trad
28.05.24
✎
13:10
(6) все же попробовать стоит. Те кто делал сайт вполне могут не догадываться что их сервер это умеет
8
trad
28.05.24
✎
13:12
(5) тыщу раз уже обкашляли — не передать многобуков через ОЛЕ
Либо весь код из (0) полностью загонять в MSScriptControl и там, внутри, конвертить. Либо OleExSup
9
trad
28.05.24
✎
13:13
(7) + попробуй
HTTP.setRequestHeader(«Accept-Charset», «windows-1251»);
10
zenon46
28.05.24
✎
13:25
(9) Пробовал так Карлик.УстановитьПараметр(«HTTPHEADER»,»Content-Type: application/json;charset=windows-1251″);
Файл прилетает в 1251 но не читаем…
11
bmitkin
28.05.24
✎
13:48
Была такая проблема. Разделили стримы на читающий и пишущий.
Вот такой код у меня справляется с большими файлами:
Байт=255; СтримВход = СоздатьОбъект("Adodb.Stream"); СтримВход.Type = 2; СтримВход.charset = ИзКодировки; СтримВход.Open(); СтримВход.LoadFromFile(ВременныйФайл); СтримВыход = СоздатьОбъект("Adodb.Stream"); СтримВыход.Type = 2; СтримВыход.charset = ВКодировку; СтримВыход.Open(); Пока СтримВход.EOS=0 Цикл СтримВыход.WriteText(СтримВход.ReadText(Байт),?(Байт=-2,1,0)); КонецЦикла; СтримВход.Close(); СтримВыход.SaveToFile(ИмяФайла,2);
12
trad
28.05.24
✎
13:56
(10) Content-Type — это про то что клиент/сервер передается сейчас в теле запроса/ответа.
Accept-Charset — это про то что клиент ожидает получить в теле ответа
13
Djelf
28.05.24
✎
14:05
(10) Скинь полученный файл.
Adodb с карликом не требуется использовать.
Это как скрещивать ежа с ужом, теоретически возможно, а практически нет.
14
MWWRuza
28.05.24
✎
15:15
Если уж карлика используете, то что мешает и конвертить с помощью него, из описания изменений:
// ————————————————————————————
2022.11.25 версия 1.0.0.8
СтрокаUTF8 = Карлик.ToUTF8(СтрокаASCII)
СтрокаASCII = Карлик.FromUTF8(СтрокаUTF8)
Аааа…. Не обратил внимание, там файл а не строка…
Тогда сложнее.
15
Djelf
28.05.24
✎
15:17
+(14) Последний FormEx делает то же самое, и тем же самым кодом внутри.
Но оверхед копеечный, путь везде будет…
16
zenon46
28.05.24
✎
15:18
(11) а ведь сработало. Спасибо!
О том, как перевести сайт и базу данных из кодировки windows-1251 в кодировку utf-8, уже рассказывалось неоднократно. Это можно сделать средствами самой DLE. А вот обратного процесса пока никто не освещал. Средствами самого движка DLE такого не сделать, но можно сделать сравнительно легко в «домашних» условиях без обращений к техподдержке хостинга или без самостоятельных дополнительных манипуляций на своем сервере. Об этом я и расскажу в этой статье. Надеюсь, она поможет тем, кто по каким-то причинам разочаровался в кодировке utf-8 и решил вернуться к windows-1251.
Для начала вам нужно сделать дамп базы данных вашего сайта (можно, и даже лучше, средствами самого движка через админпанель сайта), которые работают в кодировке utf-8, и скачать этот дамп себе на локальный компьютер.
Перед тем как начать заниматься базой данных, вам нужно будет удалить файлы дистрибутива старого сайта в кодировке utf-8 и происталлировать по новой дистрибутив DLE в кодировке windows-1251. От старого дистрибутива вам нужно оставить на хостинге (НЕ УДАЛЯТЬ!!!) папку uploads и все файлы в ней. Также, скачайте к себе на компьютер папку с вашим рабочим шаблоном и папку engine/data со всеми файлами конфигурации сайта — они вам понадобятся, чтобы не вводить все настройки заного после установки DLE в кодировке windows-1251.
Базу данных на хостинге можно оставить прежнюю, но из неё нужно будет удалить все таблицы, оставив её полностью пустой. Затем через phpmyadmin вам будет нужно на вкладке «Операции» выставить «Сравнение» cp1251_general_ci для этой базы данных. Для самого сайта, чтобы не было проблем с отображением кодировки в браузерах, в вашей панели управления на хостинге нужно будет выставить для вашего домена кодировку windows-1251 перед началом работ. Теперь можно проинсталлировать DLE в кодировке windows-1251 в вашу пустую базу данных. При установке укажите префикс таблиц, все логины и пароли к админке сайта и базе данных точно такими же, какие они у вас были до этого в прежней базе данных и сайте на utf-8. Это поможет вам избежать проблем и непонятных вам ситуаций в дальнейшем.
Теперь займемся самой базой данных…
Распакуем архив с базой данных архиватором, например WinRAR. У вас получится файл с расширением .sql. Откроем его с помощью бесплатного текстового редактора Notepad++ (он поддерживает достаточно большие файлы, если кто-то беспокоится из-за размера своего дампа базы данных). В правом нижнем углу окна Notepad++ (http://notepad-plus-plus.org/download/) будет видна кодировка «UNIX ANSI as UTF-8».
Конвертировать базу данных будем в два этапа.
— Первый этап
Для начала нам нужно сменить название кодировки с utf-8 на windows-1251 по всей базе данных для всех таблиц. Для этого вызываем диалог поиска и замены в Notepad++ и будем менять текст в базе данных с utf8 на cp1251. Нажимаем «Заменить всё» и после нажимаем «Сохранить изменения» (иконка дискеты). Для DLE 9.5 на данный момент таблиц должно быть 35 и столько же должно быть произведено замен.
— Второй этап
Теперь нам нужно конвертировать саму базу данных в windows-1251. Чтобы сохранить кириллицу кириллицей, без всяких крякозяблов, делаем следующее…
Нажимаем кнопку «Кодировка» в меню Notepad++ и затем в выпадающем меню выбираем «Преобразовать в ANSI». Ждем пока Notepad++ закончит эту операцию (на больших базах это может занять время) и после этого нажимаем снова «Сохранить изменения» (иконка дискеты).
Если вы сделали все именно так, то кириллица в вашей базе данных сохранилась без изменений, а в правом нижнем углу окна Notepad++ будет видна кодировка «UNIX ANSI».
Ваша новая база данных в кодировке windows-1251 готова. Теперь вы можете упаковать её в zip архив, чтобы уберечь от возможных повреждений при загрузке на хостинг, и загрузить в папку backup вашего свежеустановленного сайта, где уже распакуете этот архив через панель управления хостингом (ISPManager или аналогичные). После этого вы сможете восстановить базу данных стандартными средствами движка через админпанель сайта в разделе «Управление базой данных». После восстановления базы данных не забудьте в разделе «Категории» нажать кнопку «Отсортировать категории». Вот, собственно, и все премудрости, теперь у вас и сайт, и база данных в кодировке windows-1251.
Если вы прислушались к моему совету при новой установке DLE в кодировке windows-1251 сохранить префиксы таблиц, а также логины и пароли к базе данных и админке сайта прежними, то вы без проблем войдете на сайт после восстановления нашей измененной базы данных.
Для того, чтобы вам вернуть все настройки (не зря я говорил о необходимости сохранить все файлы из папки engine/data), откройте сохраненный файл config.php, найдите строчку
'charset' => "utf-8",
и замените её на
'charset' => "windows-1251",[/code]
и затем нажимаем «Сохранить изменения» (иконка дискеты). Чтобы перевести этот файл с настройками из кодировки utf-8 в windows-1251 проделываем все то же самое, как и с базой данных, и после снова нажимаем «Сохранить изменения» (иконка дискеты). В правом нижнем углу окна Notepad++ будет видна кодировка «UNIX ANSI». Можете загрузить теперь этот файл config.php к себе на сайт в папку data — все настройки и кодировка будут сохранены. Если остальные файлы из старой папки data у вас тоже изменялись на хостинге, то проделываете с каждым нужным вам из них все те же действия, а после загружаете к себе на сайт в папку data.
С шаблоном нужно сделать то же самое — все файлы стилей .css и шаблонов .tpl нужно перевести в кодировку windows-1251 при помощи Notepad++ по тому же принципу, а после загрузить к себе на сайт в папку с шаблонами. Не забудьте выставить права на файлы в соответствии с документацией к DLE.
Ну вот и все. Надеюсь, что эта информация будет для кого-то полезной. Помните, что чтобы избежать ошибок с конвертированием файлов и базы данных, все операции нужно делать с точностью и в два этапа, как описано выше.
Изменено пользователем ower_xz