I'm working on a web application that uses 0.6.0, and I may have hit a
bug in Elephant.

I have a fairly reproducible bug, when storing a string. I sometimes
have to decode a badly-read string. E.g.:

- I have "Idéal"
- I want "Idéal"

For this I use a function that if the à character is found, decode the
string from UTF-8.

(decode-string-if-needed "Idéal") => "Idéal"
(decode-string-if-needed "Idéal") => "Idéal"

The problem is when I store the result in a slot of a persistent class.
I tried to store it manually quite some times, I never had any problem:

(setf (product-description p) "Idéal")
(product-description p) => "Idéal"

As illogic as it seems, if the slot is "Idéal", the following:

(setf (product-description p) (decode-string-if-needed (product-description p)))

doesn't have the same result. If I retrieve the string from the slot,
usually swank deconnects because it encountered strange characters.

(map 'vector #'char-code "Idéal") => #(73 100 233 97 108)
(map 'vector #'char-code (product-description p)) => #(39 24 8483047 0 11)


I wrote the following test macro:

(defmacro test-conversion (location)
 `(let* ((bad ,location)
         (good (decode-string-if-needed bad))
    (setf ,location good)
    (let ((stored ,location))
      (mapcar (lambda (string) (map 'vector #'char-code string)) (list bad good 
stored))))))

And I reliably got the following:

(setf (product-description p) "Idéal")
(test-conversion (product-description p))
=> (#(73 100 195 169 97 108)
    #(73 100 233 97 108)
    #(39 24 15187975 0 11))

Does someone understand what could be going on?

Strangely,
Pierre
-- 
[EMAIL PROTECTED]
OpenPGP 0xD9D50D8A

Attachment: signature.asc
Description: Digital signature

_______________________________________________
elephant-devel site list
elephant-devel@common-lisp.net
http://common-lisp.net/mailman/listinfo/elephant-devel

Reply via email to