Date: Wed, 17 Dec 1997 17:54:18 +0100 From: "Jose M. Alcaide" <jose@we.lc.ehu.es> To: freebsd-questions@FreeBSD.ORG Subject: Re: International characters in vi are displayed as hex? 2.2.5-RELEASE Message-ID: <349803BA.9616530@we.lc.ehu.es> References: <3.0.32.19971209154440.00760f4c@lda>
index | next in thread | previous in thread | raw e-mail
Peter Olsson wrote:
>
> 16:36 1997-12-09 +0200, Ruslan Ermilov wrote:
> >Once Peter Olsson wrote:
> >> In 2.2.5-RELEASE vi displays international characters as hex.
> >>
> >> This worked fine in 2.1.0 after I set the right country-maps.
> >> I don't remember if it worked fine in 2.2.1 and/or 2.2.2.
> >
> >Did you set your LANG= environment variable properly?
>
> I think so: LANG=sv_SE.ISO_8859-1; export LANG
>
> This (and setting right iso-fonts in sysconfig/rc.conf) was what fixed
> this problem in 2.1.0 but it seems to have lost its effect now.
I have been working on this problem. Here is an excerpt from
/usr/src/contrib/nvi/FAQ:
> Q: How can I get vi to display my character set?
> A: Vi uses the C library routine isprint(3) to determine if a character
> is printable, or should be displayed as an octal or hexadecimal value
> on the screen. Generally, if vi is displaying printable characters
> in octal/hexadecimal forms, your environment is not configured correctly.
> Try looking at the man pages that allow you to configure your locale.
> For example, to configure an ISO 8859-1 locale under Solaris using csh,
> you would do:
>
> setenv LANG C
> setenv LC_CTYPE iso_8859_1
>
> Other LC_CTYPE systems/values that I'm told work:
>
> System Value
> ====== =====
> FreeBSD lt_LN.ISO_8859-1
> HP-UX 9.X american.iso88591
> HP-UX 10.X en_US.iso88591
> SunOS 4.X iso_8859_1
> SunOS 5.X iso_8859_1
>
> If there's no other solution, you can use the print and noprint edit
> options of vi to specify that a specific character is printable or not
> printable.
Well, the fact is that vi does not consider international characters
as printable, so I turned to test the isprint() library function:
I set the environment variable LANG=es_ES.ISO_8859-1, and run
the following little program:
> #include <stdio.h>
> #include <ctype.h>
> #include <locale.h>
>
> main()
> {
> char c;
>
> if (setlocale(LC_CTYPE, "") == NULL)
> {
> fprintf(stderr, "Cascote el setlocale()\n");
> exit(1);
> }
>
> while ((c = getchar()) != '\n')
> printf("%c: %s\n", c, isprint(c) ? "PRINTABLE" : "UNPRINTABLE");
>
> exit(0);
> }
This tiny program sets the locale from LANG, and then uses isprint()
to test the "printability" of characters entered from the keyboard.
This is the result:
> jose@tiburon[~]$ ./isprinttst
> nñ?¿
> n: PRINTABLE
> ñ: UNPRINTABLE
> ?: PRINTABLE
> ¿: UNPRINTABLE
Simply speaking, isprint() does not recognize as printable the
characters "ñ" and "¿", which are legal ISO-8859-1 characters.
Therefore, I think that something is broken in the ctype
macros/functions.
-- JM
-----------------------------------------------------------------------
Jose M. Alcaide | mailto:jose@we.lc.ehu.es
Universidad del Pais Vasco | http://www.we.lc.ehu.es/~jose
Dpto. de Electricidad y Electronica |
Facultad de Ciencias - Campus de Lejona | Tel.: +34-4-4647700 x2624
48940 Lejona (Vizcaya) - SPAIN | Fax: +34-4-4858139
-----------------------------------------------------------------------
"Go ahead... make my day." - H. Callahan
help
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?349803BA.9616530>
