Подробный гайд: Как узнать кодировку SVG: проверка XML-декларации, BOM и байтов - Часть 3

Как узнать кодировку SVG: проверка XML-декларации, BOM и байтов, определение через редакторы, file, Python и iconv, исправление кириллицы и конвертация в UTF-8.

2026.09.20                  


Подробный гайд: Как узнать кодировку SVG: проверка XML-декларации, BOM и байтов - Часть 3Подробный гайд: Как узнать кодировку SVG: проверка XML-декларации, BOM и байтов - Часть 3

16. Как конвертировать файл в UTF-8

Важно

Перед конвертацией сделайте резервную копию:

cp file.svg file.svg.bak

или в Windows:

Copy-Item file.svg file.svg.bak

Если файл в Windows-1251

Linux/macOS:

iconv -f windows-1251 -t utf-8 file.svg -o file-utf8.svg

Затем убедитесь, что в начале файла стоит:

<?xml version="1.0" encoding="UTF-8"?>

Если её нет, добавьте.

Если там написано:

<?xml version="1.0" encoding="windows-1251"?>


замените на:

<?xml version="1.0" encoding="UTF-8"?>

Если файл в KOI8-R

iconv -f koi8-r -t utf-8 file.svg -o file-utf8.svg

Если файл в UTF-16

iconv -f UTF-16 -t UTF-8 file.svg -o file-utf8.svg

Если известно направление:

iconv -f UTF-16LE -t UTF-8 file.svg -o file-utf8.svg

или:

iconv -f UTF-16BE -t UTF-8 file.svg -o file-utf8.svg

17. Конвертация через Python

Пример: файл в windows-1251, нужно сделать UTF-8.

from pathlib import Path

source = Path("file.svg")
target = Path("file-utf8.svg")

text = source.read_text(encoding="windows-1251")

# Если нужно, исправляем XML declaration
if 'encoding="windows-1251"' in text:
    text = text.replace(
        'encoding="windows-1251"',
        'encoding="UTF-8"'
    )

target.write_text(text, encoding="utf-8")
print("Готово")

Для UTF-16:

text = Path("file.svg").read_text(encoding="utf-16")
Path("file-utf8.svg").write_text(text, encoding="utf-8")

18. Конвертация через PowerShell

Если файл в Windows-1251 и нужно сохранить в UTF-8.

Для PowerShell 7:

$content = Get-Content -Path .\file.svg -Encoding ([System.Text.Encoding]::GetEncoding(1251))
$content | Set-Content -Path .\file-utf8.svg -Encoding utf8NoBOM

Для старого Windows PowerShell UTF8 может добавить BOM:

$content = Get-Content -Path .\file.svg -Encoding Default
$content | Set-Content -Path .\file-utf8.svg -Encoding UTF8

Но лучше контролировать результат вручную и проверять байты.


19. Типичные симптомы и их значение

Что видите Возможная причина Что делать
Текст UTF-8 открыли как Windows-1251 Переоткрыть как UTF-8
тест в виде странных латинских букв Неверное открытие/двойное перекодирование Проверить исходник, не сохранять испорченную версию
???? Символы уже потеряны при сохранении Восстановить из резервной копии, если есть
Файл открывается, но русский текст не отображается в браузере Неверная XML-декларация или HTTP-заголовок Проверить encoding, Content-Type, байты
Файл начинается с 1F 8B Это gzip/.svgz Распаковать
Файл начинается с EF BB BF UTF-8 with BOM Обычно нормально, но лучше UTF-8 без BOM
Файл начинается с FF FE UTF-16 LE Конвертировать в UTF-8 для веба
В декларации windows-1251, а файл открывается только как UTF-8 Декларация неверна Исправить на UTF-8

20. Как исправить неверную XML-декларацию

Если файл реально в UTF-8, но внутри написано:

<?xml version="1.0" encoding="windows-1251"?>

исправьте на:

<?xml version="1.0" encoding="UTF-8"?>

Если XML-декларации нет, можно добавить её самой первой строкой:

<?xml version="1.0" encoding="UTF-8"?>
<svg xmlns="http://www.w3.org/2000/svg" width="100" height="100">
  <text x="10" y="50">Текст</text>
</svg>

Важно:

Перед <?xml не должно быть никаких символов, кроме, возможно, BOM. Никаких пустых строк, пробелов или комментариев до декларации быть не должно.


21. Проверка валидности SVG после исправления

Если установлен libxml2, выполните:

xmllint --noout file.svg

Если ошибок нет, вывод будет пустым.

Можно также проверить, что файл текстовый:

file -i file.svg

И посмотреть первые строки:

head file.svg

22. Особый случай: SVG встроен в HTML

Если SVG не отдельный файл, а вставлен прямо в HTML:

<svg>
  <text>Текст</text>
</svg>

то кодировка обычно определяется кодировкой HTML-страницы.

Проверяйте:

<meta charset="UTF-8">


и HTTP-заголовок страницы.

Но если SVG подключается отдельно:

<img src="image.svg">

или через <object>, <iframe>, CSS-фон, то SVG-файл будет использовать собственную кодировку и/или HTTP-заголовок.


23. Практический алгоритм проверки

Сделайте так:

  1. Откройте файл в редакторе.
  2. Посмотрите первую строку:
   <?xml version="1.0" encoding="..."?>
  1. Посмотрите первые байты:
   xxd -l 16 file.svg
  1. Если первые байты 1F 8B, распакуйте файл.
  2. Если есть BOM, определите кодировку по BOM.
  3. Если BOM нет, попробуйте открыть как:
    • UTF-8;
    • Windows-1251;
    • KOI8-R;
    • ISO-8859-5.
  4. Если кириллица стала нормальной, это и есть фактическая кодировка.
  5. Для веба конвертируйте файл в UTF-8 без BOM.
  6. Убедитесь, что XML-декларация указывает:
   <?xml version="1.0" encoding="UTF-8"?>

24. Рекомендуемый стандарт для SVG

Для SVG в веде лучше всего использовать:

Кодировка: UTF-8
BOM: нет
Заголовок: image/svg+xml; charset=utf-8
XML declaration: <?xml version="1.0" encoding="UTF-8"?>

Пример правильного начала файла:

<?xml version="1.0" encoding="UTF-8"?>
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 100 100">
  <text x="10" y="50">Пример текста</text>
</svg>

25. Краткая шпаргалка

1. Открыть файл как текст.
2. Посмотреть <?xml ... encoding="..."?>.
3. Посмотреть первые байты:
   xxd -l 16 file.svg

   EF BB BF      → UTF-8 BOM
   FF FE         → UTF-16 LE
   FE FF         → UTF-16 BE
   1F 8B         → gzip/.svgz

4. Проверить:
   file -i file.svg

5. При подозрении на Windows-1251:
   iconv -f windows-1251 -t utf-8 file.svg -o file-utf8.svg

6. Для веба использовать:
   UTF-8 без BOM
   encoding="UTF-8"
   Content-Type: image/svg+xml; charset=utf-8

Мы делимся этой технической информацией, чтобы помочь вам в решении задач — используйте её с пониманием. Статья носит рекомендательный характер, поэтому, пожалуйста, применяйте описанные методы осмотрительно.


Статью подготовил: Аверко Денис Сергеевич @Nymexis г. Омск (специалист по ЗИ)

Комментарии

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