Skip site navigation (1)Skip section navigation (2)
Date:      Tue, 09 Sep 2008 08:26:25 +0300
From:      Giorgos Keramidas <keramida@ceid.upatras.gr>
To:        Gary Kline <kline@thought.org>
Cc:        FreeBSD Mailing List <freebsd-questions@freebsd.org>
Subject:   Re: how can i use ISO-8859-1??
Message-ID:  <8763p5yjni.fsf@kobe.laptop>
In-Reply-To: <20080909043503.GA21663@thought.org> (Gary Kline's message of "Mon, 8 Sep 2008 21:35:07 -0700")
References:  <20080909043503.GA21663@thought.org>

next in thread | previous in thread | raw e-mail | index | archive | help
On Mon, 8 Sep 2008 21:35:07 -0700, Gary Kline <kline@thought.org> wrote:
> Guys,
>
> This is one of the I've-been-meaning-to-ask questions; but other
> things keep happening that took precedence.  Now it's time to ask what
> are the voodoo commands to set up in my ~/.zshrc or other initiation
> files (probably including my muttrc) that will let me print to stdout,
> characters like the "e-aigu" or "u-umlaut" and the currency pound or
> Euro?
>
> I keep running into '\240' characters that are likely M$ format
> commands. [...]

That's not really an ISO 8859-1 problem, but a locale setup issue.

In my .bashrc file I have the following:

    # Locale setup.
    export LANG="C"
    export LC_CTYPE="el_GR.ISO8859-7"
    export LC_COLLATE="el_GR.ISO8859-7"
    unset LC_ALL LC_MESSAGES LC_MONETARY LC_NUMERIC LC_TIME

You can use something similar to set things up for `en_US.ISO8859-1':

    # Locale setup.
    export LANG="C"
    export LC_CTYPE="en_US.ISO8859-1"
    export LC_COLLATE="en_US.ISO8859-1"
    unset LC_ALL LC_MESSAGES LC_MONETARY LC_NUMERIC LC_TIME

If you want _everything_ to be displayed using the standard en_US
conventions for en_US.ISO8859-1, you can alternatively use:

    export LANG="C"
    export LC_ALL="en_US.ISO8859-1"
    unset LC_CTYPE LC_COLLATE LC_MESSAGES LC_MONETARY LC_NUMERIC LC_TIME

and let LC_ALL override everything.

A slightly better idea (which doesn't hardcode LANG and LC_ALL for all
shell instances) is to configure your personal `.login_conf' file with
something like:

        me:\
                :charset=iso-8859-1:\
                :lang=en_US.ISO8859-1:\
                :setenv=LC_ALL=en_US.ISO8859-1:

With this in place you will get the 'correct' environment regardless of
the login shell you are using: bash, csh or zsh.

    Note: By avoiding hardcoded locale setup in your shell startup file
    you can even spawn sub-shells with different locales.  Here's how
    a zsh session with `en_US.ISO8859-1' can spawn a ksh session with a
    Greek locale for example:

            zsh> env | egrep '^(LANG|LC_ALL)'
            LANG=en_US.ISO8859-1
            LC_ALL=en_US.ISO8859-1
            zsh> env LANG='el_GR.ISO8859-7' LC_ALL='el_GR.ISO8859-7' ksh
            ksh$ mutt

Note that this is only ``half of the setup'' though.  You will then have
to make sure that your terminal emulator can display ISO 8859-1 text
correctly, by choosing an appropriate font set.  The xlsfonts(1) and the
fc-list(1) utilities can show you a list of installed fonts:

    # xlsfonts | fgrep '8859-1'
    # fc-list

Pick one that includes ISO 8859-1 characters, and off you go :)




Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?8763p5yjni.fsf>