Richard Hipp <[email protected]> wrote:
> On 2/17/18, Ralf Junker <[email protected]> wrote:
>> Example SQL:
>>
>> select
>> length(printf ('%4s', 'abc')),
>> length(printf ('%4s', 'äöü')),
>> length(printf ('%-4s', 'abc')),
>> length(printf ('%-4s', 'äöü'))
>>
>> Output is 4, 3, 4, 3. Padding seems to take into account UTF-8 bytes
>> instead of UTF-8 code points.
>>
>> Should padding not work on code points and output 4 in all cases as
>> requested?
>
> The current behavior of the printf() function in SQLite, goofy though
> it may be, exactly mirrors the behavior of the printf() C function in
> the standard library in this regard.
>
> So I'm not sure whether or not this is something that ought to be "fixed".
For what it's worth, this is what bash does, which looks
consistent with SQLite:
$ printf '[%4s]\n' 'abc'
[ abc]
$ printf '[%4s]\n' 'äöü'
[äöü]
$ printf '[%-4s]\n' 'abc'
[abc ]
$ printf '[%-4s]\n' 'äöü'
[äöü]
Perl does the same:
$ perl -e 'printf("[%4s]\n", "äöü")'
[äöü]
Vim printf() function does the same, but vim also
has a more convenient %S not present in the C printf(),
see :help printf()
%s string
%6S string right-aligned in 6 display cells
%6s string right-aligned in 6 bytes
%.9s string truncated to 9 bytes
:echo printf('[%4s]', 'äöü')
[äöü]
:echo printf('[%4S]', 'äöü')
:[ äöü]
Perhaps SQLite could add %S along those lines.
After all, SQLite already added "%q", "%Q", "%w"
and "%z" which are not present in the C printf().
Vim uses the number of display cells (not number of
code points). East Asian characters generally take
twice the size of Latin characters on screen, and
such characters take 2 cells on screen. Vim also
provides functions to find string length in bytes strlen(),
in display cells strwidth() and number of characters
strchars():
:echo strlen('äöü')
6
:echo strwidth('äöü')
3
:echo strchars('äöü')
3
With a more interesting string containing
East Asian characters:
:echo strlen('äöü中文')
12
:echo strwidth('äöü中文')
7
:echo strchars('äöü中文')
5
Regards
Dominique
_______________________________________________
sqlite-users mailing list
[email protected]
http://mailinglists.sqlite.org/cgi-bin/mailman/listinfo/sqlite-users