Richard Hipp <d...@sqlite.org> wrote: > On 2/17/18, Ralf Junker <ralfjun...@gmx.de> 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 sqlite-users@mailinglists.sqlite.org http://mailinglists.sqlite.org/cgi-bin/mailman/listinfo/sqlite-users