Page 1 of 1

ICONV.obj: преобразование текста из одной кодировки в другую

Posted: Thu Aug 13, 2015 3:33 pm
by Leency
iconv — библиотека для преобразования текста из одной кодировки в другую. Написана на Си.
Путь на SVN: svn://kolibrios.org/programs/develop/libraries/iconv/

При работе с библиотекой столкнулся с проблемой.

Преобразование из UTF-8 в другую кодировку работает хорошо, а вот из любой другой UTF-8 - нет.
Можете в браузере открыть bash.im и убедиться, что вместо текста пустое место.

Кто-то может разобраться в чем дело? Нужно для браузера.

Re: ICONV.obj: преобразование текста из одной кодировки в др

Posted: Thu Aug 13, 2015 6:38 pm
by GerdtR
Там код совсем неверный какой-то)
Spoiler:

Code: Select all

    case 2: r[1] = 0x80 | (wc & 0x3f); wc = wc >> 6; wc |= 0xc0;
    case 1: r[0] = wc;
Пример: 0xD0B9(й) = 110 10000 10 111001; 10000 111001 -> 0x0439. r[1]=0x04; r[0]=0x39
Этот код точно не сделает то что надо.
И маленькое примечание: на вход в функцию идёт ucs4_t wc с нужными байтами. То есть максимум 4 байта. А utf8 до 6-ти байтов бывает. Так что не все символы преобразовать сможет.

Re: ICONV.obj: преобразование текста из одной кодировки в др

Posted: Thu Aug 13, 2015 6:48 pm
by CleverMouse
GerdtR wrote:А utf8 до 6-ти байтов бывает. Так что не все символы преобразовать сможет.
Не бывает. Диапазон Unicode ограничен до 0x10FFFF, максимум 4 байта получается. Можно использовать https://tools.ietf.org/html/rfc3629 как авторитетный источник.

Re: ICONV.obj: преобразование текста из одной кодировки в др

Posted: Thu Aug 13, 2015 6:59 pm
by GerdtR
(6 байт) 1111 110x 10xx xxxx 10xx xxxx 10xx xxxx 10xx xxxx 10xx xxxx - 31 значащий бит
На выходе да, 4 байта, а на вход 6 байт получается.

Re: ICONV.obj: преобразование текста из одной кодировки в др

Posted: Thu Aug 13, 2015 7:04 pm
by GerdtR
Стоп. Кажется я затупил.

Re: ICONV.obj: преобразование текста из одной кодировки в др

Posted: Thu Aug 13, 2015 11:29 pm
by Leency
CleverMouse
Ты бы могла залить исправленную версию ICONV?
Т.к. в системе теперь есть отображение юникода, такая либа была бы очень полезна.

Re: ICONV.obj: преобразование текста из одной кодировки в др

Posted: Thu Aug 13, 2015 11:56 pm
by hidnplayr
GerdtR The specification has changed over time, from 6 to 4 bytes maximum. This might be the reason of confusion.

Re: ICONV.obj: преобразование текста из одной кодировки в др

Posted: Fri Aug 14, 2015 3:08 pm
by CleverMouse
Leency, так у меня нет исправленной версии.

Re: ICONV.obj: преобразование текста из одной кодировки в др

Posted: Fri Aug 14, 2015 3:33 pm
by Leency
Выразился неправильно. Ты бы могла исправить проблему?

Lev даже выкладывал ассемблерную версию viewtopic.php?f=46&t=1222&p=53708&hilit=iconv#p53708

Re: ICONV.obj: преобразование текста из одной кодировки в другую

Posted: Fri Feb 05, 2021 6:06 pm
by Leency
Преобразование из UTF-8 в другую кодировку работает хорошо, а вот из любой другой в UTF-8 - нет.
Баг и ныне там, может кто-то глянет?

Также автособранная версия не работает
http://builds.kolibrios.org/rus/data/pr ... /iconv.obj