Re: locale Verwirrungen

From: Peter Wullinger <some-mail-drop(at)gmx.net>
Date: Fri, 20 Feb 2004 20:40:05 +0100

On Fri, Feb 20, 2004 at 03:13:59PM +0100, Oliver Fromme wrote:
>
> -- snip --
>
> Nein, denn seine Methode, die Variable use_ampm zu initia-
> lisieren, ist »bogus«.

In Single UNIX v3 steht dazu:
» nl_langinfo() shall return a pointer to an empty
  string if item contains an invalid setting. «

Kann man sich jetzt drüber streiten, ob in Ländern,
in denen es kein offizielles, eindeutiges 12 h-Zeitformat
gibt, T_FMT_AMPM als Parameter jetzt ungültig ist oder
nicht.

>
> > Nur hat er das Problem,
> > daß er die Uhrzeit irgendwie auf die Spaltenbreite des
> > "start"-Feldes begrenzen mußte/wollte.
>
> Nunja, das gleiche Problem wie mit Datum/Zeit bei »ls -l«.
> Aber das hat er bereits durch eine Fallunterscheidung ge-
> löst, ganz ähnlich wie bei ls. Das hat aber nichts damit
> zu tun, ob er 12- oder 24-Stunden-Format verwendet. Die
> Spaltenbreite ist so gewählt, daß beides hineinpassen wür-
> de.

Das nicht, aber er schnippelt auch noch an der Zeit
rum und schreibt nur den Tag raus, wenn es über
24 Stunden sind (was auch Blödsinn ist, weil man
ja bis 99 Stunden in zwei Stellen unterbringen kann).
Das meinte ich da, sorry, mein Fehler.

Generell ist 24 h-Format natürlich besser, da hast
du recht.

>
> > Am sinnvollsten wäre vielleicht ein strlen(), und bei
> > zu großer Länge dann anders neu berechnen.
>
> Das wäre ziemlich aufwendig und hätte kaum einen Nutzen.
> Meiner Meinung nach wäre es am einfachsten, grundsätzlich
> 24-Stunden-Format zu verwenden, wie es ls ebenfalls tut.
>
> -- snip --

Ye good olde compatability problem (Andrew S. Tanenbaum).

Erinnert mich an ein nettes Progrämmchen Namens
netsaint ... das hat auch die Ausgabe von "ping"
geparsed und sich dann gewundert, daß auf einer
SuSE 7.2 die Ausgabe auf deutsch lokalisiert war ;-).

Kleine Anekdote anbei, weil ich gerade über das
Problem am Suchen bin: Die glibc hat das Ganze
sehr elegant gelöst, dort ist T_FMT_AMPM nicht
definiert und gibt deshalb immer deinen leeren
String zurück. Auch eine Methode, Probleme
zum umgehen.

>
> > PS.: Gibt es eigentlich eine portable Methode, die Zeichenzahl (!)
> > in einem nicht-ASCII String herauszufinden?
>
> Was genau meinst Du mit nicht-ASCII-String? Falls Du
> multibyte-character-strings meinst, siehe die multibyte(3)
> manpage.

Ich dachte vor allem an utf-8, aber dann ist mir eingefallen,
daß ich intern sowieso am besten mit wchar_t arbeite, und
bei der Ausgabe dann mit wsctomb() umwandle.

>
> Falls Du mit irgendwelchen Encodings arbeitest (UTF-* oder
> sonstwas), dann ist es wohl das einfachste, Du konvertierst
> es zunächst nach Unicode bzw. ISO10646, denn dann hast Du
> eine konstante Anzahl von Bytes pro Zeichen, und dividierst
> dann die Anzahl der Bytes durch 2 (oder 4).

Wenn man das dauernd machen muß ist das höllisch aufwändig
(sprich ineffizient). Irgendwie fehlt mir eine Funktion
iconv_char_count(). Aber siehe oben ...

Gruß,
        Peter

To Unsubscribe: send mail to majordomo(at)de.FreeBSD.org
with "unsubscribe de-bsd-questions" in the body of the message
Received on Fri 20 Feb 2004 - 20:47:34 CET

search this site