Jump to content

lua: Umlaut hat 2 Zeichen?


Empfohlene Beiträge

Hallo,

Für die einheitliche Formatierung von strings wollte ich mir die einzelnen Längen ausgeben lassen. Dabei bin ich darauf gestoßen, daß Umlaute 2 Zeichen belegen...

print("Koln="..string.len("Koln"),"Köln="..string.len("Köln"))

print("o="..string.len("o"),"ö="..string.len("ö"))

ergibt...

Zitat

[16:55:31] Schalter wird betätigt -> Taster groß, 0
[16:55:31]     Schalter wird betätigt
[16:55:31]         Koln=4    Köln=5
[16:55:31]         o=1    ö=2

 

So etwas macht mich neugierig... weiß jemand warum?

Gruß
EASY
 

Link zu diesem Kommentar
Auf anderen Seiten teilen

Das passiert bei vielen Systemen/Programmiersprachen: Wenn ein Zeichen im String nicht zum Standard-Zeichensatz des Systems gehört, wird intern ein Steuerzeichen und z.B. der ASCII-Wert des Zeichens gespeichert. Deshalb können auch an anderen Stellen (z.B. Bezeichnung eines Tabellenelementes) keine Sonderzeichen (auch Umlaute und ß) nicht verwendet werden.

Gruß,
    Wolfgang

 

Link zu diesem Kommentar
Auf anderen Seiten teilen

Hallo EASY,

das Studio arbeitet in UTF8, ist also vollständig unicode-kompatibel. Und bei UTF8 bestehen deutsche Umlaute aus 2 Bytes.

Lua besitzt eine interne UTF8-Bibliothek, siehe Doku, mit der du die Zeichen unabhängig der Byte-Anzahl ermitteln kann. Ich bin mir grad nicht sicher, ob die Library im Studio aktiviert ist, falls nicht, kann ich das nachholen.

Viele Grüße,

Neo

Link zu diesem Kommentar
Auf anderen Seiten teilen

Hallo,

vor einer Stunde schrieb Neo:

Lua besitzt eine interne UTF8-Bibliothek, siehe Doku, mit der du die Zeichen unabhängig der Byte-Anzahl ermitteln kann.

In ZeroBrane Studio ergibt...

print(utf8.len("Koln"),utf8.len("Köln"))

4	4

und in MBS:

[19:07:22]         Skriptfehler (15): attempt to index a nil value (global 'utf8')

... womit diese (indirekte) Fragestellung...

vor einer Stunde schrieb Neo:

Ich bin mir grad nicht sicher, ob die Library im Studio aktiviert ist

... beantwortet wäre.

vor einer Stunde schrieb Neo:

falls nicht, kann ich das nachholen.

... wäre schön:)

... dann sieht z.B. eine Tabelle...
Tabelle01.jpg.de78c91b90bb1410dfa8feee824db8dc.jpg

... in ihren Trennungszeichen nicht so zerfranst aus...

Gruß
EASY

Link zu diesem Kommentar
Auf anderen Seiten teilen

Hallo,

Zwar etwas umständlich aber bis zur V9 behelfe ich mir damit...

--[[
Umlaute bestehen aus 2 Zeichen! (string.char(195) vorangestellt)
Es wird allerdings nur ein Zeichen dargestellt, weshalb die
Wortlänge string.len() angepasst werden muß.

* string.gsub() ist prinzipiell eine Ersetzungsfunktion
  und liefert 2 Werte: den geänderten String und die Anzahl der Ersetzungen.
  Da am geänderten String kein Interesse beseht
  -> "_" als Variable und "" als Ersetzungsstring (kann jeder beliebige String sein)
--]]

local wort="Köln-Überdorf"
local _,z=string.gsub(wort,string.char(195),"")-- *

local n=string.len(wort)
local n1=n-z

print("Anzahl der Zeichen von "..wort)
print(n,"(mit doppeltem Zeichen Umlaut)")
print(n1,"(wahre Anzahl der Zeichen)")

... liefert...

[17:23:44] Schalter wird betätigt -> Taster groß, 0
[17:23:44]     Schalter wird betätigt
[17:23:44]         Anzahl der Zeichen von Kölnberdorf
[17:23:44]         15    (mit doppeltem Zeichen Umlaut)
[17:23:44]         13    (wahre Anzahl der Zeichen)

... dann sieht die Tabelle auch wieder geordnet aus...
Tabelle02.jpg.a30869109a50ade67b0e2459037a8e4b.jpg

Gruß
EASY

Bearbeitet von EASY
Link zu diesem Kommentar
Auf anderen Seiten teilen

Erstelle ein Benutzerkonto oder melde dich an, um zu kommentieren

Du musst ein Benutzerkonto besitzen, um einen Kommentar verfassen zu können

Benutzerkonto erstellen

Neues Benutzerkonto für unsere Community erstellen.

Neues Benutzerkonto erstellen

Anmelden

Du hast bereits ein Benutzerkonto? Melde dich hier an.

Jetzt anmelden
×
×
  • Neu erstellen...