<div dir="ltr">Hello Victor,<div><br></div><div>Maybe you need to set up uffi:*default-foreign-encoding* variable?</div><div><br><div>I've had the similar problems and solved it not very good, but for me it works:</div>
<div><br></div><div>1) First of all I set ccl:*default-file-character-encoding* and ccl:*default-socket-character-encoding* to :utf-8</div><div><br></div><div>2)And then I patched uffi soures in quicklisp directory</div><div>
<br></div><div>i18n.lisp:</div><div>;;i've changed function  foreign-encoded-octet-count because of it cl-mysql returs shrinked strings in non latin-1 encodings:</div><div><br></div><div><div>(defun foreign-encoded-octet-count (str &key encoding)</div>
<div>  "Returns the octets required to represent the string when passed to a ~</div><div>foreign function."</div><div>  (declare (ignorable encoding))</div><div>  ;; AllegroCL 8-bit, CCL, and Lispworks give correct value without converting</div>
<div>  ;; to external-format. AllegroCL 16-bit, SBCL, and CLISP requires conversion</div><div>  ;; with external-format</div><div>  #+(or (and allegro ics) (and sbcl sb-unicode) (and clisp i18n))</div><div>  (length (string-to-octets str :encoding</div>
<div>                            (or encoding *default-foreign-encoding*</div><div>                                ccl:*default-file-character-encoding* :utf-8)))</div><div>  #-(or (and allegro ics) (and sbcl sb-unicode) (and clisp i18n))</div>
<div>  (length str)</div><div>  #+(and openmcl openmcl-unicode-strings)</div><div>  (ccl:string-size-in-octets str :external-format (ccl:make-external-format :character-encoding (or encoding *default-foreign-encoding* ccl:*default-file-character-encoding* :utf-8)))</div>
</div><div><br></div><div>strings.lisp </div><div>;;i've changed macro with-cstring, not to use ccl:with-cstrs but use ccl:with-encoded-cstrs :</div><div><div>(defmacro with-cstring ((cstring lisp-string) &body body)</div>
<div>  #+(or cmu sbcl scl lispworks)</div><div>  `(let ((,cstring ,lisp-string)) ,@body)</div><div>  #+allegro</div><div>  (let ((acl-native (gensym))</div><div>        (stored-lisp-string (gensym)))</div><div>    `(let ((,stored-lisp-string ,lisp-string))</div>
<div>       (excl:with-native-string (,acl-native ,stored-lisp-string)</div><div>         (let ((,cstring (if ,stored-lisp-string ,acl-native 0)))</div><div>           ,@body))))</div><div>  #+(or openmcl digitool)</div><div>
  (let ((stored-lisp-string (gensym)))</div><div>    `(let ((,stored-lisp-string ,lisp-string))</div><div>       (if (stringp ,stored-lisp-string)</div><div>           (ccl:with-encoded-cstrs</div><div>              (or *default-foreign-encoding*</div>
<div>                  ccl:*default-file-character-encoding*</div><div>                  :utf-8) ((,cstring ,stored-lisp-string))</div><div>             ,@body)</div><div>           (let ((,cstring +null-cstring-pointer+))</div>
<div>             ,@body))))</div><div>  )</div></div><div><br></div><div>Additionally i've defined encoding for still widely used cp1251, but I think it's offtopic.</div></div><div><br></div><div>Best regards, Sergey.</div>
<div><br></div><div><br></div></div><div class="gmail_extra"><br><br><div class="gmail_quote">2013/10/16 Victor <span dir="ltr"><<a href="mailto:bobbie@ua.fm" target="_blank">bobbie@ua.fm</a>></span><br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
Hi!<br>
<br>
I've stuck into a problem with unicode strings handling in the<br>
UFFI. At some point UFFI corrupts UTF-8 encoded string (I guess that<br>
this is a problem in uffi:convert-to-foreign-string function):<br>
<br>
(uffi:convert-from-foreign-<u></u>string (uffi:convert-to-foreign-<u></u>string "abc"))<br>
"abc"<br>
? (uffi:convert-from-foreign-<u></u>string (uffi:convert-to-foreign-<u></u>string "абв"))<br>
"^Z^Z^Z"<br>
<br>
Does anybody else have this problem? Are there any workarounds ready<br>
to be used or possible fixes?<br>
<br>
I am working on Ubuntu (but saw this problem reproduce on Windows as well).<br>
Clozure Common Lisp Version 1.9-r15756<br>
<br>
Thanks,<br>
Victor<br>
______________________________<u></u>_________________<br>
Openmcl-devel mailing list<br>
<a href="mailto:Openmcl-devel@clozure.com" target="_blank">Openmcl-devel@clozure.com</a><br>
<a href="http://clozure.com/mailman/listinfo/openmcl-devel" target="_blank">http://clozure.com/mailman/<u></u>listinfo/openmcl-devel</a><br>
</blockquote></div><br></div>