четверг, 5 марта 2009 г.

Что делать, если cffi не поддерживает нужную кодировку

Во-первых, cffi не при чём, поскольку за кодировки не отвечает, а полагается в этом на другую библиотеку - babel. Ну хорошо, виновного выяснили, теперь дело за малым - пропатчить babel. И это не сарказм, пропатчить babel действительно очень легко, даже если вы соврешенно ничего (ну т.е. как и я) не понимаете в кодировках. Чтобы убедиться в этом достаточно просто открыть описание какой-либо кодировки в исходниках babel, а на соседнем мониторе (надеюсь, что у вас их по крайней мере два) файл с описание той же кодировки, но в исходных кода libiconv и вам все сразу станет очевидным. Фактически, babel это не что иное, как Common Lisp порт библиотеки libiconv. Но libiconv содержит очень много разных кодировок и разработчики babel, вероятно, ещё не успели (и, вполне вроятно, не очень то и спешат) их все перенести. Так что, если вам нужна какая-то кодировка, а babel её ещё не поддерживает, то просто найдите эту кодировку в libiconv (это несложно) и замените синтаксические конструкции "C" на соответствующие синтаксические конструкции Common Lisp и добавьте полученный файл к исходному коду babel (а также, отредактируйте babel.asd). Останется ещё пара мелких деталей, так что стоит, для их уточнения, глянуть описание какой-нибудь уже имеющейся в babel кодировки. Всё.

P.S.Только не забудьте после этого перекомпилировать cffi (например, путём удаления соответствующих .fasl файлов).

P.S.P.S. Ну и когда убедитесь, что всё работает правильно, не забудьте отправить разработчикам babel патч с вашими наработками.

Комментариев нет:

Отправить комментарий