DSpace4: Кодировка XOAI и Windows

Собственно сабж. Если делать всё по инструкции, то есть шанс получить такой результат:

xoaiЕсли посмотреть на код внимательно, окажется что страница физически передана как CP-1251, а контент (и заголовок) — верные UTF-8. При этом русский поиск в SOLR, статистика и пр. сервисы работают и отображаются штатно.

Проблема решилась вот как:

  1. [dspace]/bin/dspace.bat — Находим строку
    java %JAVA_OPTS% -classpath "%DSPACE_CLASSPATH%" org.dspace.app.launcher.ScriptLauncher %*

    и делаем так:

    java %JAVA_OPTS% -Dfile.encoding=UTF-8 -Dsun.jnu.encoding=UTF-8 -classpath "%DSPACE_CLASSPATH%" org.dspace.app.launcher.ScriptLauncher %*
  2. Идем в апплет запуска томкэта во вкладку Java и в Options добавляем:
    1. -Dfile.encoding=UTF-8
    2. -Dsun.jnu.encoding=UTF-8
  3. Можно строку
    -Dfile.encoding=UTF-8 -Dsun.jnu.encoding=UTF-8

    и в апплет jre добавить.

Ну а после этого перезапуск томкэта и стандартное лекарство от всего:

dspace checker && dspace cleanup && dspace index-db-browse -f && dspace index-discovery -f && dspace oai clean-cache && dspace oai import -c && dspace generate-sitemaps

И как результат:

xoai

[UPD]

Ну а если вникать в суть проблемы, в её физику… или логику? То окажется что у DSpace всё сделано так, что запросто может получиться ситуация, когда у UI и CLI разная кодировка. Более того, может случиться ситуация когда у JSPUI будет file.encoding=UTF-8 и sun.jnu.encoding=UTF-8, у SOLR будет file.encoding=UTF-8 и sun.jnu.encoding=CP1251 а у CLI (читай, макрос filter-media и всё остальное что стартует через dspace/dsrun) будет file.encoding=CP1251 и sun.jnu.encoding=CP1251. И дело не в Windows, ведь вместо CP1251 можно получить POSIX, ASCII… да что угодно, но не UTF-8. Как оказалось, с одной стороны бага висит, а с другой стороны как-то совершенно не внятно в Encoding problems (b) вроде бы что-то и написано, только вот додумывать приходится самостоятельно.

[UPD]

ВАЖНО

Подобными действиями можно сломать другие макросы, например, filter-media. Т.е. если в скрипте dspace сделать правки по локали и кодировке, макрос filter-media начнет работать не верно и извлекать поврежденный текст. решение проблемы простое — иметь одновременно два варианта скрипта dspace. Один оригинальный, а второй с именем dspace_utf к примеру, и правками. Тогда операции с oai нужно делать через него, а всё остальное через оригинальный скрипт. Более того, можно сделать вариант с -Xmx 1280M или еще с чем-то, не нужным постоянно, но необходимым разово (например, для запуска filter-mrdia -f на большом фонде). Юниксвей короче… больше скриптов, хороших и почти одинаковых.

Запись опубликована в рубрике Библиотека с метками , . Добавьте в закладки постоянную ссылку.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *