From: Pascal B. <pj...@in...> - 2005-07-12 11:25:33
|
Yaroslav Kavenchuk writes: > Pascal Bourguignon wrote: > > The easiest way is to set *FOREIGN-ENCODING* to charset:utf-8 > > > > (setf custom:*FOREIGN-ENCODING* charset:utf-8) > > > > so the FFI does it for you automatically. > > It is necessary save the current custom:*FOREIGN-ENCODING* and restore > after use? If you only had one FFI library, it would not be necessary. But indeed it's a good idea to do it "locally". Since it's a dynamic variable you don't need to save/restore, you can just mask it, in each function: (DEFUN get-string-result () "return the result for interp as an string" (let ((custom:*FOREIGN-ENCODING* charset:utf-8)) (FUNCALL Tcl_GetStringResult interp))) I would use a macro: (defmacro with-tcl-env (&body body) `(let ((custom:*FOREIGN-ENCODING* charset:utf-8)) ,@body)) (DEFUN get-string-result () "return the result for interp as an string" (with-tcl-env (FUNCALL Tcl_GetStringResult interp))) (DEFUN append-to-result (str) "append string to result for interp" (with-tcl-env (FUNCALL Tcl_AppendElement interp str))) ;; ... -- __Pascal Bourguignon__ http://www.informatimago.com/ The world will now reboot. don't bother saving your artefacts. |