LINUX.ORG.RU

866 to koi8r


0

0

Подскажите алгоритм преобразования русского текста из 866 в koi8. (Я имею в виду чё куда смещать). Спасибо.

Ответ на: комментарий от stormbringer

Да оно понятно, просто я предположил, что кто-то, возможно, это уже сделал и формализовал.

olegenty
() автор топика

Вот кусок кода, который выведет тебе hex-коды букв KOI8-R:
for (int i = 0xC0; i < 0x100; i++) printf("0x%X = %c\n", i, i);
Перенаправь stdout проги в файл и смотри его любым viewer'ом.

С 866 проще:
0x80 = А
0x81 = Б
.
0xAF = п
<псевдографика>
0xE0 = р
.
0xEF = я
т.е. более-менее по алфавиту.

Для перекодирования нужно составить таблицу соответствия 866 -> KOI8-R. Достаточно 64 символов (если псевдографика и 'е:' тебе не нужны). Первым в таблице будет код буквы 'А' в KOI8-R, вторым - код буквы 'Б', и т.д. до 'я'.

Вот перекодирующий код:
char c = символ_в_866;
c -= 0x80;
if (c >= 0x30) c -= 0x30; //выкидываем псевдографику
c = таблица_соответствия[c]; //866 -> KOI8-R

Если тебе нужна псевдографика, то таблица будет длиной 128 байт, и строка
if (c >= 0x30)
не нужна.

nobody ★★
()

В библиотеке Мошкова есть сырцы перекодировщика

Havoc ★★★★
()

А вроде есть iconv - готовое решение (/usr/include/iconv.h)

solom
()

В натуре есть, чего ж формализовывать пишешь
iconv -fIBM866 -tKOI8-R < file866.txt > fileKOI8.txt
И всего деловто, а то цыклы всякие.
Как правильно заметил пред. товарищ, все эту петрушку и из
проги юзать можна.

temofey
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.