Page 1 of 3

Особенность с альтернативными пробелами

PostPosted: Tue Feb 07, 2012 6:51 pm
by Novikov
Обнаружил особенность, связанную с индексированием словарей, в коде которых встречаются альтернативные пробелы.

Например, если в коде словаря есть пробел с HEX-кодом A0 (неразрывный пробел) -- то словарь не появится в списке подключенных.

Чуть позже потестирую с другими символами.

Re: Особенность с альтернативными пробелами

PostPosted: Tue Feb 07, 2012 8:24 pm
by ikm
В коде словаря - это как?

Re: Особенность с альтернативными пробелами

PostPosted: Tue Feb 07, 2012 8:42 pm
by Novikov
"В коде" -- синоним "в тексте", просто по аналогии с HTML-кодом, размеченный DSL-тегами словарь я тоже считаю за "код".

Re: Особенность с альтернативными пробелами

PostPosted: Tue Feb 07, 2012 8:50 pm
by ikm
Существует только два символа, использующихся для выделения тел карточек - это пробел обыкновенный (0x20) и таб обыкновенный (0x9). Другие символы воспринимаются как часть заголовка. Это фича пришла из Лингвы.

Re: Особенность с альтернативными пробелами

PostPosted: Tue Feb 07, 2012 9:05 pm
by Novikov
Так в чем штука-то -- я именно в заголовок карточки помещаю символ неразрывного пробела с кодом A0 -- и словарь перестает подключаться. Причем сейчас специально потестировал -- что в начало заголовка, что в середину, что в карточку -- словарь не подключается.

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

Re: Особенность с альтернативными пробелами

PostPosted: Tue Feb 07, 2012 9:14 pm
by Abs62
Хм. Взял маленький dsl, понатыкал в разные места неразрывных пробелов (A0) - подключился и работает.

Re: Особенность с альтернативными пробелами

PostPosted: Tue Feb 07, 2012 9:19 pm
by Novikov
Прилагаю ZIP со словарем. Там A0 воткнут перед словами "good food". Стоит его удалить -- и словарь подключается.

GD 1.0.1.-210-gfb179ac, брал уже собранный с "гитхаба", ОС Win7 Pro 64-bit.

Re: Особенность с альтернативными пробелами

PostPosted: Tue Feb 07, 2012 9:33 pm
by Abs62
Это не неразрывный пробел. Там стоит просто байт 0xA0, а неразрывный пробел в UTF8 - это двухбайтовое слово, 0xA0C2.
А просто 0xA0 - это недопустимый символ в UTF-8, ЕМНИМС.

Re: Особенность с альтернативными пробелами

PostPosted: Tue Feb 07, 2012 9:52 pm
by Novikov
Abs62 wrote:Это не неразрывный пробел. Там стоит просто байт 0xA0, а неразрывный пробел в UTF8 - это двухбайтовое слово, 0xA0C2.

Abs62 wrote:Хм. Взял маленький dsl, понатыкал в разные места неразрывных пробелов (A0) - подключился и работает.


Чего-то я уже к ночи перестаю понимать :) Вы же написали, что понатыкали A0. Получается, тыкали именно 0xA0C2?

Re: Особенность с альтернативными пробелами

PostPosted: Tue Feb 07, 2012 9:58 pm
by Abs62
Да я-то тыкал в родном UTF-16LE, а там просто к A0 нулевой байт добавляется. 0x00A0 = 0xA0 с точки зрения математики. ;)