right adjusted strings containing umlauts

Dave Angel davea at davea.name
Thu Aug 8 11:50:25 EDT 2013


Kurt Mueller wrote:

> Am 08.08.2013 16:43, schrieb jfharden at gmail.com:
>> On Thursday, 8 August 2013 15:23:46 UTC+1, Kurt Mueller  wrote:
>>> I'd like to print strings right adjusted.
>>> print( '>{0:>3}<'.format( 'ä' ) )
>> 
>> Make both strings unicode
>> print( u'>{0:>3}<'.format( u'ä' ) )
>> Why not use rjust for it though?
>> u'ä'.rjust(3)
>
> In real life there is a list of strings in output_list from a command like:
> output_list = shlex.split( input_string, bool_cmnt, bool_posi, )
> input_string is from a file, bool_* are either True or False
> repr( output_list )
> ['\xc3\xb6', '\xc3\xbc', 'i', 's', 'f']
> which should be printed right aligned.
> using:
> print( u'{0:>3} {1:>3} {2:>3} {3:>3} {4:>3}'.format( *output_list ) )
> ( In real life, the alignement and the width is variable )
>
> How do I prepare output_list the pythonic way to be unicode strings?
> What do I do, when input_strings/output_list has other codings like iso-8859-1?
>

In general, when reading from an outside device like a file, convert to
unicode immediately, while you still know the encoding used in that
particular file.  Then after all processing, worry about alignment only
when you're about to output the string.  And at that point, you're
subject to the quirks of the font as well as the quirks of the
encoding of the terminal.

As MRAB has pointed out, sometimes two code points are used to represent
 a single character which will end up taking a single column.  Likewise
sometimes a single code point will take more than one "column" to
display.  Ideograms are one example, but a font which is not fixed pitch
 is another.

If you're going to a standard terminal, all you can do is get close. 
This is why there are special functions for gui's to help with
alignment.



-- 
DaveA





More information about the Python-list mailing list