пятница, 8 июля 2016 г.

О кодировке в Moodle

Как-то моя коллега обратилась за помощью: разобраться, почему созданный в текстовом редакторе тест не импортируется в Moodle. Синтаксис вопросов множественного выбора с одним вариантом ответа правильный, а Moodle в ходе импорта выдаёт ошибку записи в базу данных, импортируя при этом 2 вопроса из 20.

Начали разбираться, в чём причина. Первое, о чём подумали – о кодировке файла; второе – о кодировке базы данных сервера. Показательно, что Moodle всё же импортировал 2 первых вопроса. Поэтому вариант №2 отпал сам собой – если бы была ошибка в кодировке БД, то тест не импортировался бы полностью.

Рассмотрим первый вариант.
Открываю присланный мне файл в Блокноте – ошибок не вижу. Пытаюсь импортировать в своём Moodle на своём сервере – та же самая проблема. Два первых вопроса импортируются, остальные не хотят! Что делать? Снова лезть в файл и искать ошибки. И вскоре они были найдены. Итак, ниже описание проблемы и её решение.

Пришлось немного повозиться, чтобы понять, что присланные файлы не соответствуют кодировке БД сервера. Присланные файлы были в кодировке ANSI (Windows, чтобы было понятнее), а БД сервера – в кодировке UTF-8. Что это значит? А это значит, что в файлах используется разный набор символов (кодировка UTF-8 богаче набором символов, но многие коды ANSI не соответствуют кодам UTF-8). Как это определить? Можно пытаться на глаз, а можно воспользоваться расширенным блокнотом Notepad++, чем я и не замедлил воспользоваться.
При загрузке файла в Notepad++ и смене кодировки на UTF-8 нечитаемые символы сразу проявляются, это видно на изображении ниже:


Набор этих символов отсутствует в кодировке UTF-8 и они заменяются на последовательности типа x92 и т. п. (выделены на чёрном фоне).

Наша задача заменить все такие символы. В нашем случае, это троеточие в системе ANSI (обратите внимание на то, что три точки в ANSI могут быть стандартными точками, а могут быть и отдельным символом, укороченным троеточием (увидеть это можно, если в Word напечатать три точки подряд. Программа автоматически преобразует три точки в символ троеточия)). Его нужно заменить на троеточие в UTF-8, то есть просто поставить три точки (...) в блокноте Notepad++.
И ещё один код соответствует символу апострофа с неверным наклоном (апостроф в UTF-8 - прямой). Заменяем его на '.
Для замены символов в Notepad++ переходим обратно на систему кодировки ANSI и жмём комбинацию клавиш Ctrl+H (стандартная комбинация клавиш поиска и замены) или вызываем команды меню Поиск – Замена…. Копируем первый символ для замены, затем вставляем заменяемые символы. Жмём «Заменить всё». То же самое производим со вторым (и, если надо, последующими) символами.


Ну вот вроде бы и всё, что нужно знать администратору Moodle для исправления ошибок импорта.

Комментариев нет:

Отправить комментарий