[Comm] Re: кодировки [JT]

Alexej Kryukov =?iso-8859-1?q?akrioukov_=CE=C1_mail=2Eru?=
Пн Янв 19 22:27:44 MSK 2004


On Monday 19 January 2004 21:08, Vitaly Ostanin wrote:
> On Fri, 16 Jan 2004 21:19:15 +0300
>
> >
> > Да нет же! Для чисел < 256 подобные entities означают ссылку не
> > на Юникод, а на место в текущей кодовой странице, которая может
> > быть и 8-битной.
>
> Для XML это не так.
> http://www.w3.org/TR/REC-xml#NT-Char
> http://www.w3.org/TR/REC-xml#charencoding

Эта спецификация написана в расчете исключительно
на Юникод и существование иных кодировок вообще
признает сквозь зубы. Так что тут недоработка: как
тогда прикажете ссылаться на позицию в текущей кодовой
странице, если документ неюникодовый?

Однако же, дело не в этом. Я согласен, что в Вашем 
конкретном случае &146; действительно была ссылкой на 
U+0092. Но само ее появление -- результат *Вашей* ошибки.
Ведь Вы же запустили xmllint --encode koi8-r в то время,
как в заголовке стояла *некорректная* кодировка, о чем
см. ниже.

> Во-первых, это HTML, а не XML. А во-вторых, что это должно
> доказать? Я увидел три символа, похожих на апострофы.

Три *одинаковых* символа. А доказывает это, что в данном случае
0x92, как ни парадоксально, равняется U+2019, а отнюдь не
U+0092.

> > Еще раз повторяю, что 146 == 0x92 != U+0092. Шестнадцатиричную
> > систему счисления я тоже знаю ;-)
>
> Аргументируйте. Пока не убедительно.

В вышеприведенном случае это именно так.

> ISO-8859-1. Вы хотите сказать, что винда использует для
> французского cp1252 ?

А Вы хотите сказать, что нет? Винда попросту *не знает* иной 
западноевропейской кодировки, кроме cp1252. Поэтому, естественно,
в заголовке следовало выставлять именно ее. Тем более, что cp1252 --
это всего лишь расширение iso-8859-1, так что прочие символы от
этого бы никоим образом не пострадали.

> Не знаю, в чём работал notepad. Глюк в том (повторюсь), что
> был показан один символ, записан код другого. Принадлежность
> кодировке значения не имеет, т.к. xmllint перекодирует с учётом
> кодировок. Если в кодировках ошибся notepad (и винда, в которой
> "лепота"), то и в этом глюк.

Вы редактировали 8-битный документ. Существенно лишь это, т. к.
знания Notepad о кодировках ограничиваются лишь умением отличать 
Юникод от 8-битных. Собственно, странно было бы требовать от 
редактора такого класса чего-то большего.

Далее, Вы вводили текст с французской клавиатуры, которая в
8-битном приложении не могла генерировать ничего другого, кроме
8-битных же кодов в соответствии с cp1252. С этой
клавиатуры Вы ввели символ ANSI 146, который в cp1252 соответствует
U+2019 и посредством его же, естественно, отображается. Потом
Вы перекодировали с помощью xmllint с учетом *неправильной*
кодировки, выставленной в заголовке. Спрашивается, где глюк --
в винде, или всё-таки у Вас?

> Документ, в котором был accute accent, мне прислал автор текста
> на французском, он же сообщил мне, что апостроф для замены не
> подходит. Отсюда я сделал вывод, что это не апостроф. 

Какой апостроф? Тот, что на клавише [']? Дык ясный пень, не 
подходит. А вот quote single right -- в самый раз.

> Однако сути
> глюка это не меняет - записан был даже не апостроф, а символ
> контрольной последовательности.

Это символ контрольной последовательности только в кодировке 
iso-8859-1. А в cp1252 -- ничего подобного, вполне нормальный
печатаемый символ, который, как я сказал, соответствует U+2019.





Подробная информация о списке рассылки community