Subject: www.NetBSD.org/ru encoding [was: Re: [Netbsd-docs-ru] Re: CVS
To: Mike M. Volokhov <mishka@apk.od.ua>
From: Mike M. Volokhov <mishka@apk.od.ua>
List: netbsd-docs-ru
Date: 12/15/2004 10:37:47
On Wed, 15 Dec 2004 09:54:46 +0200
"Mike M. Volokhov" <mishka@apk.od.ua> wrote:

> On Mon, 13 Dec 2004 20:13:27 -0600
> Min Sik Kim <minskim@NetBSD.org> wrote:
[snip]
> > 
> > HTML files in htdocs/ru are using koi8-r, but
> > htdocs/share/xsl/netbsd-webpage-ru.xsl sets the output encoding to
> > "utf-8".  Which one should we use?
> 
> First, sorry for the delayed reply.
> 
> We should temporary set the encoding of formal-2.0 directory to UTF-8
> via .htdocs, and rest leave as is (KOI8) until ruNetBSD team had fix for
> this.
> 
> You see, the problem is XSLT 1.0 doesn't have a support (correct me
> please if I am wrong) for internal entities in result tree (i.e. &foo;).
> Such, some characters becomes outside of KOI8-R table and thus has been
> translated to "?". IMHO, the whole site should be moved to UTF-8, but
> this is a subject to discussion.

Здравствуйте!

Поясню суть проблемы.

Весь сайт NetBSD.org постепенно переходит на XML DocBook WebSite. Для
генерации страниц HTML используется XSLT 1.0. Если исходный документ XML
содержал какие-либо внутренние сущности (internal entities) вида &foo;,
то в процесе разбора этого документа, XSLT процессор раскроет их. Для
внутреннего представления данных процессор использует кодировку UTF-8.

Стоит ли говорить, что в этой кодировке присутствуют символы, которые
невозможно отобразить в KOI8. Это в частности угловые кавычки (<< и >>),
знаки Copyright и Reserved ((C) и (R) соответственно), знаки тире (--) и
т.д. Если символ не будет найден в результирующей кодировке, в конечном
документе он заменяется знаком вопроса (?). В итоге, мы имеем плохо
смотрящийся сайт.

На практике мы имеем два решения (предложите еще варианты, если есть):

1) Использовать для результирующих документов сущности HTML (Latin1).
Так, "<<" = "&laquo;", ">>" = "&raquo;", "--" = "&ndash;" и т.д. Однако
судя по всему, в XSLT 1.0 это невозможно. XSLT 2.0 поддерживает
отображение символов (character mapping) для похожих целей. Например,
можно использовать символы "{" и "}" для XML сущностей &laquo; и
&raquo;, а затем на выходе преобразовать их во что угодно, включая опять
таки те же сущности. Ньюанс в том, что препроцессор и XSL таблицы должны
поддерживать XSLT 2.0, который к тому же еще не вышел.

2) Отказаться от кодировки KOI8 для результирующих документов HTML.
Естественно, UTF-8 поддерживает все, что нужно, и поэтому, если мы
остановимся на этом варианте, я рекомендую именно ее. CP1251 (она же
Windows 1251) также имеет поддержку большинства (если не всех) символов.
Исходные файлы XML по прежнему будут иметь кодировку KOI8-R.
Единственный недостаток такого подхода в том, что некоторые документы
имеют исходный формат, отличный от XML. Это прежде всего ru/index.html,
и затем различные файлы *.list. Если от файлов .list уйти можно (и
нужно), то вот ru/index.html придется, видимо, перекодировать из KOI8.
Т.е.:


	$ cd htdocs/ru
	$ ls index.*
	index.koi8	index.html
	$ make
	iconv -f 'koi8-r' -t 'utf-8' < index.koi8 > index.html


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

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

--
С наилучшими пожеланиями,
Михаил Волохов.