замена iconv
![](/images/graemlins/smirk.gif)
У iconv есть режим, в котором он пропускает неконвертящиеся символы.
Одним из решений является написание программы на управляемых языках: Java, C#, Lisp, и пр.
И перекодировщик самому что ли писать?
На Java сама по себе знает немало кодировок.
просто в этих языках уже написаны обёртки вокруг iconv.
Могу достоверно сказать, что Mono (это который .Net под все-что-можно) не использует iconv. Есть мнение, что и Java, но тут не проверял.
У iconv есть режим, в котором он пропускает неконвертящиеся символы.где он включается?
Я использовал iconv, но эта дрянь загадочно срала то ли в неположеные куски памяти, то ли стек охуячивала хитроумно, в общем, я имел редкие, но стабильные сегфолты. Отключение iconv убирало сегфолты.Наверное ты просто неправильно им пользовался. Я однажды имел дело с iconv и осталось впечатление, что API у него не такое каким кажется в самом начале.
То есть поначалу делаешь ошибки, а потом понимаешь что кое-где недопонял что имелось в виду в man.
Мое утверждение было на вопрос: как писать без sigfault-ов
Это примерно как мыши должны стать ёжиками?
Наверное ты просто неправильно им пользовался.Найти ошибку не смог. Сегфол происходит совершенно(!) в другом месте, в другое время, и по непонятной причине -- просто попадается битый указатель. Около месяца я ставил опыты, отрубая разные части своей проги, и очень долго не мог понять, как функция из нескольких strstr и моей super_URL_unescape (она-то сволочь и делает iconv!) влияет на работу другой части. На iconv я бы никогда ничего не подумал -- уже больно распространенная вещь.
Отладка была невозможна -- процесс падал крайне редко, где-то раз в сутки, и при выжирании 1,5-2 гигов оперативки, в других случаях была полная стабильность. valgrind ес-но нигде ликов/выходов за пределы не находил, да и работал бы он суточный цикл 2-3 месяца. gdb вообще скромно показывал на битый указатель, и ясно, что бился он ой как задолго до сегфолта.
Использую я iconv вроде правильно. Конечно, еще раз перечитаю маны, но есть подозрение, что там есть баг. Другой причины я не вижу.
Сейчас смотрю, что, скорее всего, придется сделать скромную свою конвертилку, хотя может быть что-то и приглядится. :/
iconv -c
2) у меня есть надежная и отлаженная плюсовая обертка над iconv. Могу поделиться если надо - http://sourceforge.net/projects/libcore - там слегка outdated версия, могу дать и поновее.
3) можно попробовать libicu
![](/images/graemlins/wink.gif)
Оставить комментарий
Werdna
Есть такая пакость у юниксоводов -- это черезжопный iconv. Он туп до безобразия, и у него идиотский api, и он не переводит, если натыкается на незнакомый для определенной кодировки символ.Мне надо нечто (в идеале умеющее переводить из одной кодировки в другую. Желательно с интерфейсом вида "std::string convert(const std::string &)"
Я использовал iconv, но эта дрянь загадочно срала то ли в неположеные куски памяти, то ли стек охуячивала хитроумно, в общем, я имел редкие, но стабильные сегфолты. Отключение iconv убирало сегфолты.
Кто знает что-нибудь, что позволит мне работать нормально с кодировками?