kilon alios wrote:
I see thank you very much for the detailed explanation. I suspected it was working a bit like you described but now I know the juicy details :)��

Maybe you should add that text to an Encoding chapter in Pharo For The Enterprise so its widely available for people like me that are not familiar with Encodings.

+1 Encodings are the sort of edge detail that are definitely "enterprisey" - and good for both those familiar with it from another language, and Pharoers trying to break into that space.
cheer -ben


On Fri, Sep 12, 2014 at 11:18 PM, Sven Van Caekenberghe <sven@stfx.eu> wrote:
Kilon,

On 12 Sep 2014, at 16:51, kilon alios <kilon.alios@gmail.com> wrote:

> Ok this is strange the ISO 8857-7 is available with Chrome as an encoding , I tried it and it turns Greek to weird signs. Actually I tried also several others available for Greek by Chrome and none works apart from the default which is UTF-8 ....

You misunderstand how this works, let me try to explain using Pharo ;-)

When a website serves a page containing non-ascii content, like ����������������, it needs to convert from characters to bytes using an encoding. This is normally done by adding a parameter to the content-type of the page being served. Modern servers default to utf-8.

This is how you start your own HTTP server in Pharo:

(ZnServer defaultOn: 1701)
�� onRequestRespond: [ :req |
�� �� ZnResponse ok: (ZnEntity with: 'Do you speak ���������������� ?' type: ZnMimeType textPlain) ];
�� start.

It will respond with the same text to any request. Try browsing http://localhost:1701

In code, you can do it like this:

ZnClient new get: ZnServer default localUrl.

Here is how you check the content-type being used:

(ZnClient new get: ZnServer default localUrl; response) contentType.

You will see that it is text/plain;charset=utf-8 which is the default used by Zinc when serving textual content. Asking/forcing your browser to interpret these bytes using a different encoding is wrong, since the data was not encoded as such.

But the server could also be using a Greek specific byte encoding, like this:

(ZnServer defaultOn: 1701)
�� onRequestRespond: [ :req |
�� �� ZnResponse ok: (ZnEntity
�� �� �� �� �� �� �� �� �� �� �� with: 'Do you speak ���������������� ?'
�� �� �� �� �� �� �� �� �� �� �� type: (ZnMimeType textPlain charSet: 'iso-8859-7')) ];
�� start.

Now the page is served differently and browsers/clients know what to do, they will switch their encoding accordingly. Explicitly switching to utf-8 will now fail, as the content is *not* utf-8 encoded.

So why is the option there in the browser ?

Because sometimes, the server is lazy (and technically, wrong) by not explicitly setting the charset/encoding. That leaves the browser/client with a problem of course. For this there is a default, often utf-8, sometimes ascii, ..

Zinc uses the null encoder as default (ZnNullEncoder) when the server fails to set one, you can override this default as follows:

ZnDefaultCharacterEncoder
�� value: ZnUTF8Encoder new
�� during: [ ZnClient new get: ZnServer default localUrl ].

ZnDefaultCharacterEncoder
�� value: (ZnCharacterEncoder newForEncoding: 'iso-8859-7')
�� during: [ ZnClient new get: ZnServer default localUrl ].

Note however that Zinc will always follow the encoding set by the response (i.e. you cannot force another one, only use one if the encoding is missing).

HTH,

Sven

PS: If you are on Mac OS X or Linux, you can try using curl as a client. ZnClient can return a command line that you can copy/paste into a terminal:

ZnClient new get: ZnServer default localUrl; curl.

$ curl http://localhost:1701/ -H"Accept:*/*" -H"User-Agent:Zinc HTTP Components 1.0" -H"Host:localhost:1701"

Do you speak ���������������� ?

By add the -D - option the incoming HTTP headers will be dumped

$ curl -D - http://localhost:1701/ -H"Accept:*/*" -H"User-Agent:Zinc HTTP Components 1.0" -H"Host:localhost:1701"

HTTP/1.1 200 OK
Content-Type: text/plain;charset=utf-8
Content-Length: 31
Date: Fri, 12 Sep 2014 20:15:53 GMT
Server: Zinc HTTP Components 1.0

Do you speak ���������������� ?

> Also you can ignore my request as I tried Pharo with True Type fonts with Arial and it can display Greeks just fine. Well done Pharoers , once again Pharo surprises me in a good way :)
>
> On Fri, Sep 12, 2014 at 5:16 PM, Sven Van Caekenberghe <sven@stfx.eu> wrote:
>
> On 12 Sep 2014, at 16:05, kilon alios <kilon.alios@gmail.com> wrote:
>
> > I am not in any urgent need as I rarely use (like almost never) my native language in reading or writing�� when it comes to anything related to computers, apart from facebook friends. But I would like to see it added to pharo , its ���������������� or as you know it "Greek".
>
> So that would be ISO 8857-9 (http://en.wikipedia.org/wiki/ISO/IEC_8859-7 - http://unicode.org/Public/MAPPINGS/ISO8859/8859-7.TXT) then, right ?
>
> Is this nice to have or really necessary (as in used by everybody using the Greek language) ?
>
> > I assume the most popular encondings to have would be Chinese and Hindu ?
>
> I think this something that (native) speakers should help with ;-)
>
> Remember we have full Unicode Character/String capable classes, as well as good UTF-8. Those cover all languages, in theory.
>
> The question comes down to which older encodings are still really used/necessary today.
>
> > On Fri, Sep 12, 2014 at 4:10 PM, Sven Van Caekenberghe <sven@stfx.eu> wrote:
> > Hi,
> >
> > ZnCharacterEncoder and its subclasses in the package Zinc-Character-Encoding-Core (a standard part of Pharo) have the following features:
> >
> > - proper Unicode Character/String to/from byte(s) encoding/decoding
> > - calculation of encoding size per Character/String
> > - proper handling of holes in tables with exceptions (strict/lenient)
> > - properly backing up one character on a binary stream
> > - simple, efficient, documented
> > - convenience API
> > - optimisations for some encodings
> >
> > Together, they support the following encodings:
> >
> > - utf-8
> > - utf-16 (big/little endian, bom detection)
> > - null
> > - iso-8859-1 (latin-1)
> > - iso-8859-2 (latin-2)
> > - mac-roman
> > - cp1250
> > - cp1252
> > - cp1253
> > - koi8r
> > - iso-8859-7
> > - iso-8859-15
> >
> > The question is, what other encodings do you want/need ?
> >
> > There is already a request to add CP1251.
> >
> > New byte encoders are easy to add, based on the official Unicode mappings that can be found here: http://unicode.org/Public/MAPPINGS (these are automagically parsed).
> >
> > Please help us make Pharo more international friendly.
> >
> > Sven
> >
> >
> >
> >
>
>
>