Kurt Mueller wrote: > Am 08.08.2013 16:43, schrieb jfhar...@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 -- http://mail.python.org/mailman/listinfo/python-list