From dl@znain.net Fri May 18 11:24:22 2007
From: Dimitre Liotev
To: html-template-devel@common-lisp.net
Subject: Re: [html-template-devel] problem with UTF characters in template
Date: Fri, 18 May 2007 11:24:15 -0400
Message-ID: <814pmagnog.fsf@oh177.znain.com>
In-Reply-To:
MIME-Version: 1.0
Content-Type: multipart/mixed; boundary="===============5287617933509540636=="
--===============5287617933509540636==
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: quoted-printable
Edi Weitz writes:
> On Fri, 18 May 2007 10:01:06 -0400, Dimitre Liotev wrote:
>
>> when I have UTF characters in a template I get this error:
>>
>> #\? is not a LATIN-1 character.
>> [Condition of type FLEXI-STREAMS:FLEXI-STREAM-ENCODING-ERROR]
>
> What external format did you specify? How about showing us the code
> you tried and providing a backtrace?
>
> Cheers,
> Edi.
Hi Edi,
I am using the "Simple example" from your page
http://weitz.de/html-template/, specifying :external-format "UTF-8" in
the call to create-template-printer:
(defparameter *template-dispatcher*
(hunchentoot:create-prefix-dispatcher "/template-test/"
(lambda ()
(let* ((html-template:*string-modifier* #'identity)
(rows (loop for i below 49 by 7
collect
(list :cols
(loop for j from i below (+ i 7)
for string =3D (format nil "~R" j)
collect (list :content string=20
:colorful-style (oddp j))))))
(values (list :rows rows)))
(with-output-to-string (html-template:*default-template-output*)
(html-template:fill-and-print-template
(html-template:create-template-printer #p"foo.tmpl" :external-forma=
t "UTF-8")
values)))))) =20
(push *template-dispatcher* hunchentoot:*dispatch-table*)
The template:
some cyrullic chars: =D0=94=D0=
=96=D0=93=D0=91 |
|
Now if I point the browser to http://localhost:8082/template-test/ it
works fine if the UTF chars are not there, but if I put any cyrillic UTF
encoded character in the template I get the error:
#\? is not a LATIN-1 character.
[Condition of type FLEXI-STREAMS:FLEXI-STREAM-ENCODING-ERROR]
Restarts:
0: [ABORT] Abort entirely from this (lisp) process.
Backtrace:
0: ((:INTERNAL SWANK:SWANK-DEBUGGER-HOOK 0))
Locals:
CONDITION =3D :UNKNOWN
1: ((:INTERNAL (:TOP-LEVEL-FORM "swank-backend.lisp" 20112) 0)
#
#)
Locals:
SWANK-BACKEND::HOOK =3D #
SWANK-BACKEND::FUN =3D #
SWANK-BACKEND::FUN =3D #
2: (SWANK-BACKEND:CALL-WITH-DEBUGGER-HOOK
#
#)
Locals:
SWANK-BACKEND::HOOK =3D #
SWANK-BACKEND::FUN =3D #
SWANK-BACKEND::HOOK =3D #
SWANK-BACKEND::FUN =3D #
3: ((:INTERNAL SWANK::CALL-WITH-CONNECTION 0))
Locals:
SWANK::FUN =3D #
4: (SWANK::CALL-WITH-REDIRECTED-IO #
#)
Locals:
SWANK::CONNECTION =3D #
FUNCTION =3D #
FUNCTION =3D #
SWANK::IO =3D #
SWANK::IN =3D #
SWANK::CONNECTION =3D #
SWANK::OUT =3D #
5: (SWANK::MAYBE-CALL-WITH-IO-REDIRECTION
#
#)
Locals:
SWANK::CONNECTION =3D #
SWANK::FUN =3D #
SWANK::CONNECTION =3D #
SWANK::FUN =3D #(#)
6: (SWANK::CALL-WITH-CONNECTION #
#)
Locals:
SWANK::CONNECTION =3D #
SWANK::FUN =3D #
SWANK::CONNECTION =3D #
SYSTEM::.LAMBDA-LEXICAL-ENV. =3D #(#)
SWANK::FUN =3D #
7: (SWANK:SWANK-DEBUGGER-HOOK
#
#)
Locals:
CONDITION =3D #
SWANK::HOOK =3D #
SYSTEM::.LAMBDA-LEXICAL-ENV. =3D #
CONDITION =3D :UNKNOWN
8: (INVOKE-DEBUGGER #)
Locals:
CONDITION =3D #
EXCL::LOCAL-0 =3D #
EXCL::LOCAL-1 =3D #
EXCL::LOCAL-2 =3D T
9: (SIGNAL #)
Locals:
EXCL::DATUM =3D #
EXCL::ARGUMENTS =3D NIL
EXCL::LOCAL-0 =3D NIL
EXCL::LOCAL-1 =3D #
EXCL::LOCAL-2 =3D ((ERROR . #))
EXCL::LOCAL-3 =3D (ERROR . #)
EXCL::LOCAL-4 =3D #
EXCL::LOCAL-5 =3D #\null
EXCL::LOCAL-6 =3D #
10: (ERROR FLEXI-STREAMS:FLEXI-STREAM-ENCODING-ERROR :FORMAT-CONTROL
"~S is not a LATIN-1 character." :FORMAT-ARGUMENTS (#\?)
:STREAM
#)
Locals:
EXCL::DATUM =3D FLEXI-STREAMS:FLEXI-STREAM-ENCODING-ERROR
EXCL::ARGUMENTS =3D (:FORMAT-CONTROL "~S is not a LATIN-1
character." :FORMAT-ARGUMENTS
(#\?) :STREAM
#)
EXCL::LOCAL-0 =3D (:FORMAT-CONTROL "~S is not a LATIN-1
character." :FORMAT-ARGUMENTS
(#\?) :STREAM
#)
EXCL::LOCAL-1 =3D FLEXI-STREAMS:FLEXI-STREAM-ENCODING-ERROR
EXCL::LOCAL-2 =3D #
EXCL::LOCAL-3 =3D 97
EXCL::LOCAL-4 =3D 1
EXCL::LOCAL-5 =3D #
EXCL::LOCAL-6 =3D #
:UNKNOWN =3D NIL
:UNKNOWN =3D NIL
:UNKNOWN =3D NIL
:UNKNOWN =3D NIL
:UNKNOWN =3D NIL
11: (FLEXI-STREAMS::SIGNAL-ENCODING-ERROR
#
"~S is not a LATIN-1 character." #\?)
Locals:
FLEXI-STREAMS:FLEXI-STREAM =3D
#
FLEXI-STREAMS::FORMAT-CONTROL =3D "~S is not a LATIN-1 character."
FLEXI-STREAMS::FORMAT-ARGS =3D (#\?)
FLEXI-STREAMS::FORMAT-ARGS =3D (#\?)
FLEXI-STREAMS:FLEXI-STREAM =3D
#
FLEXI-STREAMS::FORMAT-CONTROL =3D "~S is not a LATIN-1 character."
12: ((METHOD STREAM-WRITE-CHAR
(FLEXI-STREAMS::FLEXI-LATIN-1-OUTPUT-STREAM T))
# #\?)
Locals:
STREAM =3D #
CHAR =3D #\?
CHAR =3D #\?
FLEXI-STREAMS:OCTET =3D 1044
STREAM =3D #
13: ((:INTERNAL (:EFFECTIVE-METHOD 2 NIL NIL NIL NIL) 0)
# #\?)
Locals:
EXCL::METHARG0 =3D #
EXCL::METHARG1 =3D #\?
EXCL::LOCAL-0 =3D #
EXCL::LOCAL-1 =3D #\?
EXCL::LOCAL-2 =3D #
EXCL::LOCAL-3 =3D #
EXCL::LOCAL-4 =3D NIL
EXCL::LOCAL-5 =3D 3
EXCL::LOCAL-6 =3D 137387322
EXCL::LOCAL-7 =3D #
EXCL::LOCAL-8 =3D 2
14: ((METHOD TRIVIAL-GRAY-STREAMS:STREAM-WRITE-SEQUENCE
(FLEXI-STREAMS:FLEXI-OUTPUT-STREAM T T T))
#
"
=20
=20
=20
zero |
..)
Locals:
FLEXI-STREAMS:FLEXI-OUTPUT-STREAM =3D
#
SEQUENCE =3D "
=20
=20
=20
zero |
=20
=20
=20
some
cyrillic chars: ???? one | ..
FLEXI-STREAMS::START =3D 173
FLEXI-STREAMS::END =3D 4537
SEQUENCE =3D "
=20
=20
=20
zero |
=20
=20
=20
some
cyrillic chars: ???? one | ..
FLEXI-STREAMS:FLEXI-OUTPUT-STREAM =3D
#
#:|g1798| =3D #
15: ((METHOD STREAM-WRITE-STRING
(TRIVIAL-GRAY-STREAMS:TRIVIAL-GRAY-STREAM-MIXIN T))
#
"
=20
=20
=20
zero |
..)
Locals:
STREAM =3D #
TRIVIAL-GRAY-STREAMS::SEQ =3D "
=20
=20
=20
zero |
=20
=20
=20
some
cyrillic chars: ????
one | ..
TRIVIAL-GRAY-STREAMS::START =3D 0
TRIVIAL-GRAY-STREAMS::END =3D NIL
TRIVIAL-GRAY-STREAMS::START =3D 0
TRIVIAL-GRAY-STREAMS::END =3D NIL
STREAM =3D #
16: (FLEXI-STREAMS:STRING-TO-OCTETS "
=20
=20
=20
zero |
=20
=20
=20
some cyrillic chars:
???? one | ..)
Locals:
STRING =3D "
=20
=20
=20
zero |
=20
=20
=20
some
cyrillic chars: ???? one | ..
FLEXI-STREAMS::EXTERNAL-FORMAT =3D
#
FLEXI-STREAMS::START =3D :UNSUPPLIED
FLEXI-STREAMS::END =3D :UNSUPPLIED
FLEXI-STREAMS::OUT =3D #
NIL =3D 0
STRING =3D "
=20
=20
=20
zero |
=20
=20
=20
some
cyrillic chars: ???? one | ..
FLEXI-STREAMS::START =3D 0
FLEXI-STREAMS::END =3D NIL
FLEXI-STREAMS::EXTERNAL-FORMAT =3D
#
17: (HUNCHENTOOT::COMPUTE-LENGTH "
=20
=20
=20
zero |
=20
=20
=20
some cyrillic chars:
???? one | ..)
Locals:
NIL =3D "
=20
=20
=20
zero |
=20
=20
=20
some
cyrillic chars: ???? one | ..
EXCL::LOCAL-0 =3D "
=20
=20
=20
zero |
=20
=20
=20
some cyrillic chars:
???? one | ..
EXCL::LOCAL-1 =3D #
EXCL::LOCAL-2 =3D #
18: (HUNCHENTOOT::START-OUTPUT "
=20
=20
=20
zero |
=20
=20
=20
some cyrillic chars:
???? one | ..)
19: (HUNCHENTOOT::PROCESS-REQUEST
((:HOST . "localhost:8082")
(:USER-AGENT
. "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1)")
(:ACCEPT
. "text/xml,application/xml,application/xhtml+xml,text/html;q=3D0.9,=
text/plain;q=3D0.8,image/png,*/*;q=3D0.5")
(:ACCEPT-LANGUAGE . "en-us,en;q=3D0.5")
(:ACCEPT-ENCODING . "gzip,deflate")
(:ACCEPT-CHARSET . "ISO-8859-1,utf-8;q=3D0.7,*;q=3D0.7")
(:KEEP-ALIVE . "300") (:CONNECTION . "keep-alive") ..))
20: (HUNCHENTOOT::PROCESS-CONNECTION #
#)
--===============5287617933509540636==--