[Openmcl-devel] utf-8 output in a terminal

Grégory Vanuxem g.vanuxem at gmail.com
Sun Jul 28 18:31:51 PDT 2024


Found!

In level-0/l0-misc.lisp there is exactly what i was looking for.
(ccl::%get-utf-8-cstring ..) It's a pity I think it is not documented
since now UTF-8 is relatively widely used.

All is right now!

Thanks

Greg

Le lun. 29 juil. 2024 à 01:34, Grégory Vanuxem <g.vanuxem at gmail.com> a écrit :
>
> Hello Matthew,
>
> Le dim. 28 juil. 2024 à 07:31, R. Matthew Emerson <rme at clozure.com> a écrit :
> >
> >
> >
> > > On Jul 27, 2024, at 8:23 PM, Grégory Vanuxem <g.vanuxem at gmail.com> wrote:
> > >
> > > In FriCAS  built on top of Clozure CL I obtain this output in a terminal (WSL2)
> > >
> > > (gamma(x) âÃÂàreals && Re(x) > 0) || (x âÃÂàintegers &&
> > > gamma(x) âÃÂàreals)
> > >
> > > instead of (SBCL)
> > >
> > > (gamma(x) ∈ reals && Re(x) > 0) || (x ∉ integers && gamma(x) ∈ reals)
> > >
> > > if I (print ...) a string with, for example, ∈, in a pure Clozure CL
> > > (recently git cloned) this is correctly printed, no problem.
> > >
> > > So I wonder if I have to modify the output stream character encoding
> > > or the output routine.
> >
> > Check that the external format of the FriCAS output stream is what you expect. In other words, if you pass an explicit :external-format argument to cl:open, make sure it matches what your terminal requires.
>
> I don't think it is at this stage in fact, I was wrong. Better
> checking what is going on, since the string comes from C (sorry I
> forgot to mention that) I tend to think my problem comes from
> ccl::%get-cstring. Tracing it seems to show it's not "decoding" it and
> considers it as a 8859-1 string. But to test this i.e. force CCL to
> use :utf8 format to "read it" I have not found. There is no option
> from what I know to get-cstring like :external-format and using
> with-encoded-cstrs does not seem to work.
>
> Right now I am using some FFI macros from FriCAS to simplify my code,
> I will try to revert to pure CCL code first to check my claims,
> TIMTOWTDI.
>
> > Doing (describe *terminal-io*) might show something interesting. Here’s what it shows for me:
> >
> > ? (describe *terminal-io*)
> > #<ECHOING-TWO-WAY-STREAM input #<BASIC-CHARACTER-INPUT-STREAM UTF-8 (TTY/0) #x1824C7D6>, output #<BASIC-CHARACTER-OUTPUT-STREAM UTF-8 (TTY/1) #x1824C2A6> #x1825FBE6>
> > Class: #<STANDARD-CLASS ECHOING-TWO-WAY-STREAM>
> > Wrapper: #<CLASS-WRAPPER ECHOING-TWO-WAY-STREAM #x18039A16>
> > Instance slots
> > SHARED-RESOURCE: NIL
> > OPEN-P: T
> > INPUT-STREAM: #<BASIC-CHARACTER-INPUT-STREAM UTF-8 (TTY/0) #x1824C7D6>
> > OUTPUT-STREAM: #<BASIC-CHARACTER-OUTPUT-STREAM UTF-8 (TTY/1) #x1824C2A6>
> >
> > The default external format has been #<EXTERNAL-FORMAT :UTF-8/:UNIX #x18249C6E> for quite a long time now.
> >
> > https://ccl.clozure.com/docs/ccl.html#characters-and-external-formats
>
> This is exactly what I have when I use this function in FriCAS. I have
> read the documentation and the internal utf32 representation but here
> I am stuck. This is not the most important thing I need to do but it
> will be imperative for some next stuff.
>
> In anyway, thanks!
>
> Greg
>
> >
> > >
> > > And more importantly, how can I achieve that?
> > >
> > > - Greg
> > >
> > > PS:
> > > (1) -> )lisp CCL:*DEFAULT-EXTERNAL-FORMAT*
> > > Value = :UNIX
> >


More information about the Openmcl-devel mailing list