LINUX.ORG.RU

принцип кодировки UTF-8


0

0

Нужно текст из кодировки UTF-8 конвертировать в KOI8-R (и обратно).
iconv мне не подходит, решил сам написать кодировшик (мне нужно работать со строго определенным набором символов, остальные символы заменяя пробелами)
Не подскажите ли правильно я понимаю принцип кодирования:
Цифры и латинские буквы кодируются 1 байтом, а русские 2 байтами
причем первый байт для русской буквы ВСЕГДА равен D0


IMHO, самое лучшее не изобретать таких "полуфабрикатов", которые только с koi8-r могут работать, а сделать полноценную функцию, которая конвертировала бы текст из utf8 в любую однобайтную кодировку.

Примеры можно найти где угодно: в исходниках Qt, gtk... да хоть ядра. По примерам принцип легко понимается, на себе проверено.

devinull ★★
()
Ответ на: комментарий от logIN

Ну, для общего развития можно и разобраться. Кроме того, у меня постоянно iconv ( которая программа, не ф-ия ) ругается на какую-то недостимую последовательность символов, которую осилить не может. Подозреваю, что и с функцией такие проблемы могут быть. Или с ней не бывает?

devinull ★★
()
Ответ на: комментарий от logIN

А потом все твердые знаки ручками править? Только что попробовал перевести файл из cp1251 в koi8-r. Вместо твердых знаков везде "(R)" стоит. Оно мне надо? Лучше что-то более корректное использовать.

devinull ★★
()
Ответ на: комментарий от devinull

Если всегда твердый знак заменяет на (R) то можно опосля sed'ом пробежаться.

plm ★★★★★
()
Ответ на: комментарий от devinull

>А потом все твердые знаки ручками править?
$ iconv -t utf-8 << EOF > test
> ъ Ъ
> EOF
$ cat test | iconv -f utf-8
ъ Ъ
$

Покажи свой пример.

logIN
()
Ответ на: комментарий от logIN

если сделать без //translit, е меня останавливается на четвертом абзаце.

пРЕДЛАГАЕМАЯ КНИГА ПpЕДСТАВЛЯЕТ СОБОЙ ОДИН ИЗ ПЕРВЫХ ШАГОВ В ЭТОМ НАПРАВЛЕНИИ. в НЕЙ С КАЖДЫМ ОПЕРАТОРОМ, С ИХ КОМБИНАЦИЯМИ И, В ТОМ ЧИСЛЕ, С ЦИКЛАМИ СВЯЗЫВАЮТСЯ ПРЕОБРАЗОВАНИЯ ПРЕДИКАТОВ, ЯВЛЯЮЩИЕСЯ ФОРМАЛЬНЫМ ВЫРАЖЕНИЕМ ИХ СВОЙСТВ, И ОПРЕДЕЛЕНИЕ СВОЙСТВ ПРОГРАММЫ В ЦЕЛОМ ПРЕВРАЩАЕТСЯ В ЗАДАЧУ ЛОГИЧЕСКОГО ВЫВОДА. оСОБЕННО ВАЖНО, ЧТО aВТop ОБiconv: illegal input sequence at position 2822

Если добавить //translt, то конвертируется весь файл, но вместо твердых знаков стоит "(R)". Например в том месте, где iconv останавливается в первом случае.

devinull ★★
()
Ответ на: комментарий от devinull

>но вместо твердых знаков стоит "(R)"

Теперь заметил. Но ведь действительно документ-то испорчен. в cp1251 Ъъ выглядит как зЗ. То бишь iconv тут не причем.

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