Skip site navigation (1)Skip section navigation (2)
Date:      Thu, 29 Jan 2009 06:20:54 +0000
From:      Frank Shute <frank@shute.org.uk>
To:        Svein Halvor Halvorsen <svein.h@lvor.halvorsen.cc>
Cc:        questions@freebsd.org
Subject:   Re: printf and utf-8
Message-ID:  <20090129062054.GA19589@melon.esperance-linux.co.uk>
In-Reply-To: <497E41B8.2030203@lvor.halvorsen.cc>
References:  <497E31EE.9010202@lvor.halvorsen.cc> <0B02CEE8-D38A-4D94-B76D-49721BDDACF0@mac.com> <497E41B8.2030203@lvor.halvorsen.cc>

next in thread | previous in thread | raw e-mail | index | archive | help
On Tue, Jan 27, 2009 at 12:05:28AM +0100, Svein Halvor Halvorsen wrote:
>
> Chuck Swiger wrote:
> >On Jan 26, 2009, at 1:58 PM, Svein Halvor Halvorsen wrote:
> >>As far as I can see, printf is not calculating strings lengths 
> >>correctly when using utf-8 encoding. Either that, or I'm using byte 
> >>count, and can't find the character count :-/
> >
> >printf(1) explicitly states that it works with ASCII and ANSI 
> >X3.159-1989 (``ANSI C89'') character escapes, and it also notes:
> >
> >     Multibyte characters are not recognized in format strings (this is 
> >only a
> >     problem if `%' can appear inside a multibyte character).
> >
> >Some platforms have a printf_l(3) which is locale/xlocale-aware, but 
> >there doesn't seem to be a corresponding CLI utility which understands 
> >Unicode/UTF8/widechars.
> 
> Thanks for your explanation.
> 
> Do you have a suggestion to solve the following problem without using 
> printf(1):
> 
> I have a text file that I want to print in a "box" on a terminal from a 
> shell script. Now I've padded the lines with spaces to a certain length 
> using printf %-70s and appended the box drawing character. Is there 
> another simple way that will work with utf-8?
> 

What's your perl like?

http://search.cpan.org/~sadahiro/String-Multibyte-1.05/Multibyte.pm

http://perldoc.perl.org/perlfaq6.html#How-can-I-match-strings-with-multibyte-characters%3f

Looks like they might be interesting.


Regards,

-- 

 Frank 


 Contact info: http://www.shute.org.uk/misc/contact.html 




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