LINUX.ORG.RU

А я еще бы посоветовал зайти на www.unicode.org и поискать там, на ftp у них были (и сейчас скорее всего есть) примеры и все таблицы. iconv хорошо, но если только для mb<->koi8-r, то уж больно громоздко (IMHO).

anonymous
()

iconv - это правильно.

anonymous
()

> iconv - это правильно.

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

anonymous
()

Размер iconv роли не играет, так как на линуксе он все равно гарантированно присутствует в glibc. iconv очень оптимизирован, поэтому дает минимальный оверхед. iconv не большой - таблицы подгружаются динамически. Ну а самое главное, iconv позволяет сконцетрироваться на написании программы, а не на изобретении велосипеда - очередного перекодировщика из юникода в koi8-r. По-моему этих аргументов должно быть достаточно.

Кстати, когда сделаешь свой перекодировщик сравни его скорость с iconv'ом. Скорее всего, твой на процент-другой окажется быстрее. Только стоит ли такое ускорение затраченных усилий? Не было бы большей пользой потратить время на алгоритмическую оптимизацию программы?

anonymous
()

> так как на линуксе он все равно гарантированно присутствует в glibc

И давно добавили? Вроде как все время отдельная либа была...

> iconv очень оптимизирован

Ой... Тока не надо опять про оптимизацию. Функция, мапящая заведомо известную страницу все равно быстрее будет.

> Кстати, когда сделаешь свой перекодировщик сравни его скорость с iconv'ом.

Уже и давно.

> Скорее всего, твой на процент-другой окажется быстрее.

Ну таки больше чем на процент другой, но ладно, соглашусь на два.

> Только стоит ли такое ускорение затраченных усилий?

Ок, а если я запускаю их толпу (ну вот надо было)? И уже не на два процента быстрее, а куда больше.

> Не было бы большей пользой потратить время на алгоритмическую оптимизацию программы?

Т.е. ты хочешь сказать, что написание перекодировщика чрезвычайно сложная задача и отнимает уйму времени и умственных усилий? Разочарую. Это, к счастью, не так.
Этот перекодировщик (win/koi/dos/utf8/utf16/utf32) занимает где-то килобайт тридцать (это включая таблицы, ессно). Написал один раз, использовал уже раз десять (в том или ином виде).

anonymous
()

Вообще-то для этого используется wcstombs который описан в стандарте ANSI (определен в stdlib.h), но вот реальзована ли эта функция в линуксе, это уже другой вопрос.

Ogr
()

Причем здесь Linux? gcc это программка, которая живет где угодно в том числе
и под Linux'ом.
Функция wcstombs у gcc реализована и лежит как и пологается в stdlib.h
см man wcstombs.

Кроме того в gcc 3.x наконец то появилась поддержка локалей в соответствии
с c++ стандартом. Что в общем то даже удобнее чем wcstombs.

см http://www.research.att.com/~bs/3rd_loc.pdf
http://www.cantrip.org/locale.html

Так что перекодировка должна бы выглядеть примерно так:

cin.imbue(locale("ru_RU.utf8")) ; // utf8
cout.imbue(locale("ru_RU.koi8r")) ; // koi8r
unsigned char d;
while (cin >> d >> volume) os << d;

anonymous
()

> Функция wcstombs у gcc реализована и лежит как и пологается в stdlib.h см man wcstombs.

После одного этого предложения остальное читать без смеха невозможно.

anonymous
()

2anonymous (*) (2002-07-09 01:51:14.371)

Оно то и понятно, в 2 часа ночи будешь хихикать даже с собственной тени. Проспись, солнышко ты наше полуночное, может тогда поймешь о чем речь идет.

anonymous
()

2anonymous (*) (2002-07-09 12:48:43.593)

А, так ты, урод, даже не понял, что тебя справедливо умыли и продолжаешь упираться. Ну-ну.
Потрудись найти в gcc функцию wcstombs. Как устанешь искать, пристрелись, урод. Воздух чище станет.

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